Подтвердить что ты не робот

Как упорядочить список переменных с помощью grid.arrange?

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() в gridExtra.

Как бы это сделать, если число графиков в plist является переменной?

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

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

4b9b3361

Ответ 1

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

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

enter image description here

Ответ 2

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

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

введите описание изображения здесь

Ответ 3

Вы можете использовать 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