【问题标题】:How to save multiple ggplot charts in loop for using grid.arrange如何在循环中保存多个ggplot图表以使用grid.arrange
【发布时间】:2020-02-27 22:17:02
【问题描述】:

我有一个 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 一起使用的方式)?

【问题讨论】:

  • 我认为你需要创建一个listp &lt;- vector("list", N),分配给列表元素p[[i]] &lt;- ggplot(...),然后使用p[[1]]p[[2]]
  • 好的,谢谢。就是这张票。

标签: r ggplot2


【解决方案1】:

您很少希望在 R 中使用 for 循环。在 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)

【讨论】:

  • 堡垒,一个优雅的解决方案!
【解决方案2】:

这可以通过启动 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多