Как организовать список переменных участков с помощью сетки.устроить?


library(ggplot2)
df <- data.frame(x=1:10, y=rnorm(10))
p1 <- ggplot(df, aes(x,y)) + geom_point()
plist <- list(p1,p1,p1,p1,p1)
# In my real example,a plot function will fit a ggplot to a list of datasets 
#and return a list of ggplots like the example above.

Я хотел бы организовать участки с помощью grid.arrange() in gridExtra.

как бы я это сделал, если количество участков в plist - это переменная?

это работает: grid.arrange(plist[[1]],plist[[2]],plist[[3]],plist[[4]],plist[[5]])

но мне нужно более общее решение. мысли?

4 51

4 ответа:

Как насчет этого:

library(gridExtra)
n <- length(plist)
nCol <- floor(sqrt(n))
do.call("grid.arrange", c(plist, ncol=nCol))

enter image description here

можно использовать grid.arrange() и arrangeGrob() со списками, пока вы указываете список с помощью grobs = аргументов по каждой функции. Например, в приведенном примере:

library(ggplot2)
library(gridExtra)
df <- data.frame(x=1:10, y=rnorm(10))
p1 <- ggplot(df, aes(x,y)) + geom_point()
plist <- list(p1,p1,p1,p1,p1)

grid.arrange(grobs = plist, ncol = 2) ## display plot
ggsave(file = OutFileName, arrangeGrob(grobs = plist, ncol = 2))  ## save plot

для полноты картины (а как же этот старый, уже ответивший вопрос был возрожден, недавно) Я хотел бы добавить решение с использованием cowplot пакет:

cowplot::plot_grid(plotlist = plist, ncol = 2)

enter image description here

Я знаю, что вопрос конкретно говорится с помощью gridExtra пакета, но