【发布时间】: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/5963269、minimal reproducible example 和stackoverflow.com/tags/r/info(r 标签页顶部)了解如何使用示例数据改进问题以及最少但完整的工作代码。
-
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