【问题标题】:Save plots generated by repeat function保存重复功能生成的图
【发布时间】:2021-07-13 14:02:17
【问题描述】:

目前我正在寻找将 72 个绘图保存到 PDF 文件的解决方案。 这 72 个地块是通过 function 和以下代码 repeat 创建的。

ID 代表我的数据集中的一个人。此人的 ID 附加了多行数据。要转到下一个人,我使用 ID = ID + 1

使用下面的代码,我设法创建了一个 PDF 文件,但这是一个包含 72 页的 PDF 文件。我想每行有 4 个地块。 nrow = 4 的概念就像您在 grid.arrange 中使用的一样。最好每行 4 个,每页 24 个。

pdf("plot1.pdf")
 repeat {
  ID = ID + 1
  print(ggplot(ID))
  if (ID == 72){
    break}}
dev.off()

【问题讨论】:

  • 您的问题在很多方面都无法重现,请阅读stackoverflow.com/q/5963269minimal reproducible examplestackoverflow.com/tags/r/infor 标签页顶部)了解如何使用示例数据改进问题以及最少但完整的工作代码。
  • Tangent:虽然repeat 没有错,但执行for (x in ID) print(ggplot(x)) 可能更直观(也可能更安全),因为它会在IDs 用尽时自行终止,有如果有任何差距是没有风险的,并且(对我而言)它更容易阅读/理解并因此维护。
  • @r2evans 这只是一个关于如何在 PDF 页面上并排获取导出图的问题。我想提一下重复功能,以便知道我的方法是什么。我当然可以提供一个完整的可重现示例,但我认为不需要它,因为问题是:如何在 PDF 页面上并排获取导出的图(nrow = 4 in anrange.grid - 例如)同时用我的方法。如果您仍需要可重现的示例,请参阅:stackoverflow.com/questions/67128043/…(由我发布)
  • 您在您的问题中引用了grid.arrange()... 是否有特殊原因导致您在这里不可以选择?其他包中也有类似的功能,可以指定列/行数,例如cowplot,通过plot_grid()
  • @chemdork123 据我所知,您需要参考实际绘图才能创建网格,例如:plot1 <- ggplot(df, aes(x = x, y = y)。在 grid.arrange 中,您将参考 plot1 等,然后使用 nrow = 4 并排获得 4 个图形(如果您提供 4 个图形)。因为我没有专门创建绘图,但更像是通过函数生成它们并重复,因为需要根据人员 ID 计算不同的数据,所以我不能真正使用 grid.arrange。我知道 grid.arrange() 是如何工作的,因此我引用 nrow = 4 因为我想要那种结果。

标签: r ggplot2 scatter-plot ggsave


【解决方案1】:

我仍然不确定这是否是一个合法的解决方案,但至少现在已经修复了!

显然我正在寻找这样的解决方案:

plot.list <- list()
for(i in 1:72){
  plot.list[[length(plot.list) + 1]] <- plot_utility(i)
}

grid1 <- grid.arrange(grobs = plot.list, ncol = 4)

ggsave("plot1.pdf", 
       plot = grid1, 
       device = "pdf", 
       scale = 2,
       width = 25, 
       height = 20, 
       units = c("cm")
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多