使用gridExtra从列表创建ggplot图的网格

使用gridExtra从列表创建ggplot图的网格,r,ggplot2,gridextra,R,Ggplot2,Gridextra,我正在尝试创建一个自动绘图功能,并且有一些关于使用grid.arrange在ggplot2中从列表中布局图形的问题 这是玩具数据 set.seed(1234) df <- data.frame(rep(NA,20)) for (i in 1:6) df[,i] <- rnorm(20, 0, 3) names(df) <- paste("a", 1:6, sep = "") 当我们调用gg时,我们得到的是一个由[[idx]]索引的图的列表。我想知道两件事 1如何将它们传递到g

我正在尝试创建一个自动绘图功能,并且有一些关于使用grid.arrange在ggplot2中从列表中布局图形的问题

这是玩具数据

set.seed(1234)
df <- data.frame(rep(NA,20))
for (i in 1:6) df[,i] <- rnorm(20, 0, 3)
names(df) <- paste("a", 1:6, sep = "")
当我们调用gg时,我们得到的是一个由[[idx]]索引的图的列表。我想知道两件事

1如何将它们传递到grid.arrange中,而无需在绘图功能中将它们转换为Grob。目前,我收到一条错误消息,说glistb中只允许“grob”,但在其他情况下,我不需要将ggplot2图形转换为grob,以将其传递到grid.arrange

2撇开grob问题不谈,有没有办法将整个列表传递到grid.READGEN中,而不必手动列出每个图形?换句话说,我希望能够用

gridExtra::grid.arrange(gg, ncol = 3)
而不是

gridExtra::grid.arrange(gg[[1]], gg[[2]], gg[[3]], gg[[4]], gg[[5]], gg[[6]], ncol = 3)

不确定这是你要找的,但是你试过marrangeGrobgg吗,ncol=3,nrow=2?marrangeGrob是用于多页安排的。如果希望所有打印都在一个页面上,请使用grid.arrange。要将绘图对象列表传递给任一函数,请使用grobs参数:grid.arrangegrobs=gg,ncol=3。我发现cowplot::plot\u grid与绘图格式更一致。gridExtra::grid.arrange在标题和图例格式方面出现了一些问题,它们都失去了相对于主绘图的比例。不确定这是您要寻找的内容,但您是否尝试过marrangeGrobgg,ncol=3,nrow=2?marrangeGrob用于多页排列。如果希望所有打印都在一个页面上,请使用grid.arrange。要将绘图对象列表传递给任一函数,请使用grobs参数:grid.arrangegrobs=gg,ncol=3。我发现cowplot::plot\u grid与绘图格式更一致。gridExtra::grid.arrange在标题和图例格式方面出现了一些问题,它们都失去了相对于主绘图的比例。
library(foreach)
gg <- foreach(x = nameList, y = noteList) %do% gFunct(x,y)
gridExtra::grid.arrange(gg, ncol = 3)
gridExtra::grid.arrange(gg[[1]], gg[[2]], gg[[3]], gg[[4]], gg[[5]], gg[[6]], ncol = 3)
gridExtra::grid.arrange(grobs = gg, ncol = 3)