ggplot2: Define plot layout with grid.arrange() as argument of do.call()
48,726
You can now do,
grid.arrange(p1,p2,p3,p4, layout_matrix = rbind(c(1,1,1),c(2,3,4)))
Author by
CptNemo
Updated on July 17, 2020Comments
-
CptNemo almost 4 years
I want to obtained an unbalanced grid of plots such as
require(ggplot2) require(gridExtra) df <- data.frame(value1 = rnorm(200), value2 = rnorm(200), value3 = rnorm(200), value4 = rnorm(200)) p1 <- ggplot(df) + geom_density(aes(x=value1)) p2 <- ggplot(df) + geom_density(aes(x=value2)) p3 <- ggplot(df) + geom_density(aes(x=value3)) p4 <- ggplot(df) + geom_density(aes(x=value4)) grid.arrange(p1, arrangeGrob(p2,p3,p4, ncol=3), heights=c(2.5/4, 1.5/4), ncol=1)
but using a function
myplot <- function(i){ p <- ggplot(df) + geom_density(aes_string(x=i)) return(p) }
and an
lapply
callp <- lapply(c("value1","value2","value3","value4"), myplot) do.call(grid.arrange, c(p))
In this case
grid.arrange
distribute the plots in a 2 by 2 matrix. But I want to obtain an unbalanced layout as withgrid.arrange(p1, arrangeGrob(p2,p3,p4, ncol=3), heights=c(2.5/4, 1.5/4), ncol=1)