当尝试调用 grid.arrange 将多个图放在同一个 ggplot2 图上时,我首先构建了一个我想要的图的列表。然后我构建相应的参数列表来调用 grid.arrange,如上一个问题中所述。这是我的代码(我的数据框称为 manip):
args.list <- NULL;
plot.list <- NULL;
for (m in names(manip[2:10])) {
plot.list <- c(plot.list, list(qplot(manip$side, y=manip[,m],ylab=m))
}
args.list <- c(plot.list, 1, 9)
names(args.list) <- c(names(manip)[2:10], list("nrow","ncol"))
do.call(grid.arrange, args.list)
Run Code Online (Sandbox Code Playgroud)
这是有效的,除了 9 个图是完全一样的!经查,数据始终是对应的那个m=10。所以我的猜测是m循环中没有分配的值,而是稍后评估。但是,标签ylab=m 已正确分配,并且对于所有图形都不同。
所以我真的不明白有什么区别以及解释器如何选择何时评估 m 的情节。有人可以解释一下吗?
我将首先回答您的问题,然后使用分面图展示替代方案。
已编辑
以下经过简化的代码似乎可以工作:
library(gridExtra)
manip <- mtcars
plot.list <- lapply(2:11,
function(x)qplot(manip$mpg, y=manip[, x],
ylab=names(manip)[x]))
do.call(grid.arrange, c(plot.list, nrow=10))
Run Code Online (Sandbox Code Playgroud)
它产生了这个丑陋的情节:

我知道,在不了解自己的目标的情况下尝试提供建议是危险的。尽管如此,您是否考虑过在情节中使用多方面?
下面的代码要简单得多,执行 quiker 并生成一个更容易解释的图表:
library(reshape2)
manip <- mtcars
mmanip <- melt(manip, id.vars="mpg")
str(mmanip)
ggplot(mmanip, aes(x=mpg, y=value)) +
geom_point(stat="identity") +
facet_grid(.~variable, scales="free")
Run Code Online (Sandbox Code Playgroud)
