Multiple ggplots of different sizes Multiple ggplots of different sizes r r

Multiple ggplots of different sizes


You can use nested arrangeGrob calls like this example:

library(ggplot2)library(gridExtra)p <- ggplot(data.frame(x=1, y=1), aes(x,y)) + geom_point()grid.arrange(  arrangeGrob(    p,     arrangeGrob(p, p, nrow=2),    ncol=2 ,widths=c(2,1)),  arrangeGrob(p, p ,p ,ncol=3, widths=rep(1,3)),  nrow=2)

Edit:

gl <- lapply(1:9, function(ii) grobTree(rectGrob(),textGrob(ii)))grid.arrange(  arrangeGrob(gl[[1]],              do.call(arrangeGrob, c(gl[2:5], ncol=2)),              nrow=1,              widths=3:2),  do.call(arrangeGrob, c(gl[6:9], nrow=1, list(widths=c(1,1,1,2)))),nrow=2, heights=c(2,1))

enter image description here


An alternative with gtable

library(gtable)gl <- lapply(1:9, function(ii) grobTree(textGrob(ii), rectGrob()))# gl <- lapply(1:9, function(ii) ggplotGrob(qplot(1,1) + ggtitle(ii)))gt <- gtable(widths=unit(rep(1,5), "null"),             heights=unit(rep(1,3), "null"))gtable_add_grobs <- gtable_add_grob # aliasgt <- gtable_add_grobs(gt, gl,                        l=c(1,4,5,4,5,1,2,3,4),                       r=c(3,4,5,4,5,1,2,3,5),                       t=c(1,1,1,2,2,3,3,3,3),                       b=c(2,1,1,2,2,3,3,3,3))grid.newpage()grid.draw(gt)

enter image description here


You can use the same matrix interface as layout with grid.arrange,

library(gridExtra)library(grid)gl <- lapply(1:9, function(ii) grobTree(rectGrob(), textGrob(ii)))grid.arrange(grobs = gl, layout_matrix = rbind(c(1,1,1,2,3),                                               c(1,1,1,4,5),                                               c(6,7,8,9,9)))

enter image description here

and the same works for ggplots; note that NA can be used to indicate blank cells. The result is a gtable, compatible with ggsave().

gl <- replicate(9, ggplot(), FALSE)grid.arrange(grobs = gl, layout_matrix = rbind(c(1,1,1,2,3),                                               c(1,1,1,4,5),                                               c(6,7,8,NA,9)))

enter image description here