保存重复功能生成的图
Posted
技术标签:
【中文标题】保存重复功能生成的图【英文标题】: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()
【问题讨论】:
您的问题在很多方面都无法重现,请阅读***.com/q/5963269、minimal reproducible example 和***.com/tags/r/info(r 标签页顶部)了解如何使用示例数据改进问题以及最少但完整的工作代码。 Tangent:虽然repeat
没有错,但执行for (x in ID) print(ggplot(x))
可能更直观(也可能更安全),因为它会在ID
s 用尽时自行终止,有如果有任何差距是没有风险的,并且(对我而言)它更容易阅读/理解并因此维护。
@r2evans 这只是一个关于如何在 PDF 页面上并排获取导出图的问题。我想提一下重复功能,以便知道我的方法是什么。我当然可以提供一个完整的可重现示例,但我认为不需要它,因为问题是:如何在 PDF 页面上并排获取导出的图(nrow = 4 in anrange.grid - 例如)同时用我的方法。如果您仍需要可重现的示例,请参阅:***.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 因为我想要那种结果。
【参考方案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")
)
【讨论】:
以上是关于保存重复功能生成的图的主要内容,如果未能解决你的问题,请参考以下文章