Ответ 1
Как насчет этого:
library(gridExtra)
n <- length(plist)
nCol <- floor(sqrt(n))
do.call("grid.arrange", c(plist, ncol=nCol))
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]])
но мне нужно более общее решение. мысли?
Как насчет этого:
library(gridExtra)
n <- length(plist)
nCol <- floor(sqrt(n))
do.call("grid.arrange", c(plist, ncol=nCol))
Для полноты (и поскольку этот старый, уже ответ на вопрос был недавно обновлен), я хотел бы добавить решение, используя пакет cowplot
cowplot::plot_grid(plotlist = plist, ncol = 2)
Вы можете использовать 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