0
我试图创建一个自动化的图形功能和对使用grid.arrange
使用gridExtra
在这里,在ggplot2
从列表布局图的几个问题清单创建ggplot图的网格的玩具数据
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 = "")
现在根据是否存在参数创建一个简单的图形函数,在这种情况下是否将一个注释添加到图形中(注意:我这样做是为了将我的真实工作流程表示为尽可能接近)
gFunct <- function (vec, note = NULL) {
if(is.null(note)) {
g <- ggplot(df, aes_string(vec)) + geom_histogram()
return(g)
} else {
g <- ggplot(df, aes_string(vec)) + geom_histogram() + annotate("text", x = 0, y = 3, label = note)
return(g)
}
}
现在创建两个列表
nameList <- names(df)
noteList <- list(a1 = NULL, a2 = "hey", a3 = "hey there", a4 = NULL, a5 = NULL, a6 = "there")
现在通过这些名单进入图形功能通过foreach
功能
library(foreach)
gg <- foreach(x = nameList, y = noteList) %do% gFunct(x,y)
我们得到什么,当我们要求gg
是图列表,索引[[idx]]
。我想知道两件事
(1)如何将这些传递到grid.arrange
而无需在绘图函数中将它们转换为grobs。目前,我收到一条错误消息,说only 'grobs' allowed in "gList"
,但在其他场合,我不需要将ggplot2
图转换成grobs,将它们传递到grid.arrange
。 (2)撇开grob问题,有没有办法将整个列表传递到grid.arrange
而不必手动列出每个图表?换句话说,我希望能够与
gridExtra::grid.arrange(gg, ncol = 3)
而不是
gridExtra::grid.arrange(gg[[1]], gg[[2]], gg[[3]], gg[[4]], gg[[5]], gg[[6]], ncol = 3)
不知道这是你在找什么,但你有没有试过'marrangeGrob创建图形的矩阵( gg,ncol = 3,nrow = 2)'? – GGamba
'marrangeGrob'用于多页面安排。如果你想把这些图全部放在一个页面上,那么使用'grid.arrange'。要将plot对象列表传递给任一函数,请使用'grobs'参数:'grid.arrange(grobs = gg,ncol = 3)'。 – eipi10