如何在循环中保存多个ggplot图表以使用grid.arrange

时间:2019-11-01 15:57:41

标签: r ggplot2

我有一个for循环,每次通过循环都会为一组不同的参数创建一个不同的ggplot。现在,我一次打印N个不同的图表。我想保存它们,以便可以使用grid.arrange将它们全部放在一页上。这不起作用:

p <- vector(length = N)
for(i in 1:N)
   p[i] <- ggplot( ........
...
...
grid.arrange(p[1], p[2], .. p[N], nrow = 4)

是否有保存图的方法,以便以后在循环外的页面上绘制图的网格,或者有没有办法在循环前设置网格规格并即时生成网格图作为循环是否被执行(例如,par与plot一起使用的方式)?

2 个答案:

答案 0 :(得分:3)

您很少想在R中使用循环。在R的lapply()中。只需一步即可:

do.call(
  grid.arrange,
  lapply(data, function(f){
    ggplot(f, ...)
  }
)

编辑: 如果要存储列表以供以后打印:

plot_objects <- lapply(data, function(f) {
  ggplot(f, ...)
})

do.call(grid.arrange, plot_objects)

答案 1 :(得分:1)

这可以通过启动list而不是vector来存储绘图对象来解决。

p <- vector('list', N)
for(i in seq_len(N)) {
  p[[i]] <- ggplot(...)
 }

grid.arrange(p[[1]], p[[2]], ..., p[[N]], nrow = 4)