这是在ggplot2 google群组上交叉发布的
我的情况是我正在处理一个输出任意数量的图形的函数(取决于用户提供的输入数据).该函数返回一个n个图的列表,我想将这些图以2 x 2的形式排列.我正在努力解决以下问题:
我目前的策略是grid.arrange从gridExtra包中使用.它可能不是最佳的,特别是因为,这是关键,它完全不起作用.这是我评论的示例代码,试验了三个图:
library(ggplot2)
library(gridExtra)
x <- qplot(mpg, disp, data = mtcars)
y <- qplot(hp, wt, data = mtcars)
z <- qplot(qsec, wt, data = mtcars)
# A normal, plain-jane call to grid.arrange is fine for displaying all my plots
grid.arrange(x, y, z)
# But, for my purposes, I need a 2 x 2 layout. So the command below works acceptably.
grid.arrange(x, y, …Run Code Online (Sandbox Code Playgroud) 我最近一直在使用lapply和sapply作为我的首选功能.到目前为止这么好,但为什么下面的代码不起作用让我感到困惑.
df<-as.data.frame(matrix(rnorm(50),ncol=5))
names(df)<-c("x1","x2","x3","x4","x5")
df1<-seq_len(10)
ll<-lapply(seq(1,5), function(i) qplot(df1,df[,i]))
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Error in `[.data.frame`(df, , i) : undefined columns selected
Run Code Online (Sandbox Code Playgroud)
好吧,显然我在可重现的代码中犯了一个很不幸的错误.它现在有效,但ll列表中的所有图都是相同的图.当我运行这个:
do.call(grid.arrange,ll)
我得到以下图像:

所有的情节都是一样的!这也是我通过数据运行时获得的输出.