It\'s relatively simple using grid.arrange in the gridExtra package to arrange multiple plots in a matrix, but how can you arrange plots (the ones
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)))

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)))