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.
Run Code Online (Sandbox Code Playgroud)
我想使用安排地块grid.arrange()在gridExtra.
如果图中的数量plist是可变的,我该怎么做?
这有效:
grid.arrange(plist[[1]],plist[[2]],plist[[3]],plist[[4]],plist[[5]])
但我需要一个更通用的解决方案.想法?
Jos*_*ien 114
这个怎么样:
library(gridExtra)
n <- length(plist)
nCol <- floor(sqrt(n))
do.call("grid.arrange", c(plist, ncol=nCol))
Run Code Online (Sandbox Code Playgroud)

Mic*_*gge 24
只要使用每个函数中的参数指定列表,就可以使用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
Run Code Online (Sandbox Code Playgroud)
Uwe*_*Uwe 13
为了完整起见(并且这个旧的,已经回答的问题已经恢复,最近)我想使用cowplot包添加一个解决方案:
cowplot::plot_grid(plotlist = plist, ncol = 2)
Run Code Online (Sandbox Code Playgroud)
我知道这个问题是使用gridExtra 包专门指出的,但是patchwork包中的wrap_plots函数是处理可变长度列表的好方法:
library(ggplot2)
# devtools::install_github("thomasp85/patchwork")
library(patchwork)
df <- data.frame(x=1:10, y=rnorm(10))
p1 <- ggplot(df, aes(x,y)) + geom_point()
plist <- list(p1,p1,p1,p1,p1)
wrap_plots(plist)
Run Code Online (Sandbox Code Playgroud)
关于它的一个有用的事情是,您无需指定所需的列数,并且将旨在使列数和行数保持相等。例如:
plist <- list(p1,p1,p1,p1,p1,p1,p1,p1,p1,p1,p1,p1,p1)
wrap_plots(plist) # produces a 4 col x 4 row plot
Run Code Online (Sandbox Code Playgroud)
在此处了解有关拼凑而成的软件包的更多信息
| 归档时间: |
|
| 查看次数: |
30790 次 |
| 最近记录: |