grid.arrange使用图表列表

时间:2014-05-09 17:19:04

标签: r

我觉得我总是在问同一个问题的变体:(

我最近得到了一个使用do.call函数在grid.arrange上显示的图表+表格列表

library(grid)
library(ggplot2)
library(gridExtra)

g1 <- ggplot(data.frame(x=c(0, 10)), aes(x)) + stat_function(fun=sin)
g2 <- ggplot(data.frame(x=c(0, 10)), aes(x)) + stat_function(fun=tan)
g3 <- ggplot(data.frame(x=c(0, 10)), aes(x)) + stat_function(fun=cos)
g4 <- tableGrob(data.frame(x <- 1:10, y<-2:11, z<-3:12))

plist <- list(g1,g2,g3,g4)
do.call("grid.arrange", c(plist))

这有效,但我需要&#34; plist&#34;根据变量&#34; numruns&#34;生成 我试过这个,但它不起作用:

plist2 <- list(paste0("g", seq_len(numruns+1)))
do.call("grid.arrange", c(plist2))

我相信我所做的就是调用grid.arrange(&#34; g1&#34;,&#34; g2&#34;,...)而不是grid.arrange(g1,g2, ...)。 我在使用lapply之前解决了类似的问题,但在这种情况下,这似乎对我没有帮助,或者我没有错误地使用它。

感谢您的帮助。

1 个答案:

答案 0 :(得分:16)

您可以像这样使用mget

plist2 <- mget(paste0("g", 1:4))
do.call(grid.arrange, plist2)

但最好在创建它们时将这些图表放入列表中,如下所示:

funs <- c(sin, tan, cos)
DF <- data.frame(x=c(0, 10))

g <- lapply(funs, function(fun, df) {
  ggplot(df, aes(x)) + stat_function(fun=fun)
}, df=DF)

#g[[4]] <- tableGrob(data.frame(x = 1:10, y = 2:11, z = 3:12))
#better for programmatic use:
g <- c(g, list(tableGrob(data.frame(x = 1:10, y = 2:11, z = 3:12))))

do.call(grid.arrange, g)