将多个 ggplot2 绘图合并到 PDF 上

  • 本文关键字:PDF 合并 绘图 ggplot2 r
  • 更新时间 :
  • 英文 :


我希望能够将ggplot2中的许多绘图绘制成一个PDF。 我在下面制作了可重现的代码,这些代码创建了我收到的错误消息。

m <- matrix(data=cbind(rnorm(30, 0), rnorm(30, 2), rnorm(30, 5)), nrow=30, ncol=3)
df <- as.data.frame(m)
dfs <- stack(df)
uniqueplot1=ggplot(dfs, aes(x=values)) + geom_density()
uniqueplot2=ggplot(dfs, aes(x=values)) + geom_density()
objects=ls()
plot_search=grep("uniqueplot",objects)
objects=objects[plot_search]
pdf("plots.pdf")
grid.arrange(objects,ncol=2)
dev.off()

我收到的错误是:

Error in gList(list("uniqueplot1", "uniqueplot2", wrapvp = list(x = 0.5,  :
  only 'grobs' allowed in "gList"
In addition: Warning message:
In grob$wrapvp <- vp : Coercing LHS to a list

有没有办法将项目objects转换为正确的对象类型,以便它可以与grid.range成功一起使用?

编辑:这是一个简化的例子 - 在现实生活中,我将制作数百个情节,并且不可能单独列出所有这些。

使用 lapply(objects, get) 为了创建一个包含ggplot对象的列表(因为objects包含两个字符的向量"uniqueplot1" "uniqueplot2"但不包含底层对象),如以下示例所示:

m   <- matrix(data = cbind(rnorm(30, 0), rnorm(30, 2), rnorm(30, 5)), nrow  =30, ncol = 3)
df  <- as.data.frame(m)
dfs <- stack(df)
uniqueplot1 <- ggplot(dfs, aes(x = values)) + geom_density()
uniqueplot2 <- ggplot(dfs, aes(x = values)) + geom_density()
objects     <- ls()
plot_search <- grep("uniqueplot",objects)
objects     <- objects[plot_search]
pdf("plots.pdf")
gridExtra::grid.arrange(grobs = lapply(objects, get), ncol = 2)
dev.off()

好吧,R 习惯用法是将循环中的结果存储在列表中,而不是直接存储在环境中,然后从列表中选择所需的元素。然后,您可以使用 grid.ararrangement 的 grobs 参数。像这样的事情,你必须适应你的例子。

myplots <- lapply(variables, function(v) 
                ggplot(ggplot(dfs, aes_string(x=v)) + geom_density()
names(myplots) <- variables
plotme <- myplots[grep("pickme", variables)]
grid.arrange(grobs=plotme, ncol=2)

最新更新