【问题标题】:R Generate Multiple Plots for a single pdfR为单个pdf生成多个图
【发布时间】:2015-03-11 18:53:33
【问题描述】:

我有一个大约 100 个不同组的列表;

categories <- c('cat1','cat2','cat3',....)

我想编写一个循环,一次只抓取 1 个类别的数据,并生成一个图 (x,y);比如……

for (i in 1:length(categories){
category_data <- data[which(data$category==categories[i]),]
plot(category_data$y,category_data$x)}
### however, I would like to save EACH plot to a single PDF that I can scroll through to quickly visualize everything at once

如何生成包含 100 个不同绘图的单个 PDF?

【问题讨论】:

  • 您可以使用 Rmarkdown 和 knitr 包轻松完成此操作。
  • 您想在 PDF 的每一页上绘制不同的图吗?所以你最终会得到一个 100 页的 PDF?
  • 好点@CephBirk。也许每页 4 个图会更好?

标签: r plot


【解决方案1】:

在我的大学统计和微积分课程中,我使用 R 来绘制大部分图表。我发现将多个绘图合并到一个 PDF 中的最佳方法是应用 Separation of Concerns 的原则。

R 非常擅长生成绘图(我喜欢 png 格式),但 LaTeX 在生成 PDF 方面表现出色。我的简化工作流程如下所示:

  1. 在已知文件夹中生成绘图,并按顺序生成名称(graph_01.png 等)。
  2. 打开一个我保留的模板文件,以避免重新创建样板代码。
  3. 使用shell脚本生成插入图片所需的markup
  4. 进行任何手动清理、添加字幕等。
  5. 使用pdflatex 生成pdf

这非常简单,几乎完全自动化。

【讨论】:

    【解决方案2】:

    您可以使用pdf函数(或png、jpeg等)生成多页pdf,生成您想要的所有文件,然后使用dev.off关闭文件

    pdf(file = "output.pdf")
    
    for (i in 1:length(categories){
       category_data <- data[which(data$category==categories[i]),]
       plot(category_data$y,category_data$x)}
    
    dev.off()
    

    【讨论】:

      【解决方案3】:

      基于 OP 想要每个 PDF 页面 4 个图,我建议:

      pdf('plots.pdf')
      par(mfrow=c(2,2))
      for (i in 1:length(categories){
          category_data <- data[which(data$category==categories[i]),]
          plot(category_data$y,category_data$x)}
      dev.off()
      

      如果 OP 决定每页绘制不同数量的图形,则可以更改 mfrow 参数。目前它设置为 2 行 x 2 列 = 每页 4 个图。

      【讨论】:

        猜你喜欢
        • 2013-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-27
        • 1970-01-01
        • 2016-10-14
        • 1970-01-01
        • 2014-02-10
        相关资源
        最近更新 更多