#' @source Forked from https://github.com/tidyverse/ggplot2/wiki/Share-a-legend-between-two-ggplot2-graphs
grid_arrange_shared_legend <- function(plots, ncol = length(plots), nrow = 1,
position = c("bottom", "right")) {
position <- match.arg(position)
g <- ggplot2::ggplotGrob(plots[[1]] + ggplot2::theme(legend.position = position))$grobs
gb <- sapply(g, function(x) x$name) == "guide-box"
# No legend because only one class:
if (!all(!gb)) {
legend <- g[[which(sapply(g, function(x) x$name) == "guide-box")]]
lheight <- sum(legend$height)
lwidth <- sum(legend$width)
}
gl <- lapply(plots, function(x) x + ggplot2::theme(legend.position="none"))
if (!all(!gb)) gl <- c(gl, ncol = ncol, nrow = nrow)
if (!all(!gb)) {
if (position == "bottom") {
hei <- grid::unit.c(grid::unit(1, "npc") - lheight, lheight)
combined <- gridExtra::arrangeGrob(do.call(gridExtra::arrangeGrob, gl),
legend, ncol = 1,
heights = hei)
} else if (position == "right") {
wid <- grid::unit.c(grid::unit(1, "npc") - lwidth, lwidth)
combined <- gridExtra::arrangeGrob(do.call(gridExtra::arrangeGrob, gl),
legend, ncol = 2,
widths = wid)
}
} else {
# No legend because only one class. Different methods to plot ROC
# beneath dist, not under, if length(gl) == 2
if (length(gl) == 2) {
combined <- gridExtra::grid.arrange(gl[[1]], gl[[2]], ncol = 2, nrow = 1)
} else {
combined <- gridExtra::arrangeGrob(do.call(gridExtra::arrangeGrob, gl),
ncol = 1, nrow = 1)
}
}
grid::grid.newpage()
grid::grid.draw(combined)
invisible(combined)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.