如何在列表中保存或绘图

时间:2017-06-15 13:30:51

标签: r list ggplot2 r-grid

我已经命名了qplot或ggplot中的实体(对象,列表,grobs?)列表,它们可以自己渲染或保存,但我无法弄清楚如何将它们作为列表或向量传递给它们安排。我相信我的问题一般是提取列表对象而不是ggplot2。

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

# Generate a named list of ggplots
plotlist <- list()
for(a in c(1:4)) {
    for(b in c(1:4)) {
        plotlist[[paste0("Z",a,b)]] <-
            qplot(rnorm(40,a,b),
                  geom="histogram",
                  xlab=paste0("Z",a,b))
    }
}

# Arrange and display them
# The following two lines work fine, so the plots are in there:
plotlist[["Z12"]]
ggsave(plot=plotlist[["Z12"]], filename="deletable.png")

# The following two lines complain about not being 'grobs'
grid.arrange(plotlist, widths=c(1,1), ncol=2)
grid.arrange(unlist(plotlist), widths=c(1,1), ncol=2)

我可以以某种方式将它们作为grobs投射而不明确命名它们,或者找到一个替代unlist的方法让grob出来吗?

1 个答案:

答案 0 :(得分:1)

使用lapply(plotlist, ggplot2::ggplotGrob)生成ggplot2 grobs列表。然后可以将此grob列表传递给gridExtra::grid.arrange

例如:

library(ggplot2)
library(gridExtra)

plotlist <- list()

for(a in c(1:4)) {
    for(b in c(1:4)) {
        plotlist[[paste0("Z",a,b)]] <-
            qplot(rnorm(40,a,b),
                  geom="histogram",
                  xlab=paste0("Z",a,b))
    }
}

grid.arrange(grobs = lapply(plotlist, ggplotGrob), widths = c(1, 1), ncol = 2)

enter image description here