【问题标题】:R: Save multiple plots from a file list into a single file (png or pdf or other format)R:将文件列表中的多个图保存到单个文件中(png或pdf或其他格式)
【发布时间】:2014-10-14 13:38:34
【问题描述】:

我有超过 10 个文件(最终有数百个......)。我在 R 中生成的 png 格式的文件保存到一个文件夹中。

我的问题:如何将这些文件保存到多图中(例如,一页上的 4 个数字排列成 2 行 2 列)?

我知道这可以通过使用par(mfrow=c(2,2)) 合并到绘图循环中,但我怎么能在生成后仅调用文件夹中的文件来执行此操作?

【问题讨论】:

  • 这会有所帮助,但实际上我有超过 10 个文件(最终有数百个......)。如果我理解正确,您必须在此解决方案中分别调用每个文件?
  • 同一链接中的第二个解决方案怎么样?
  • 您可以使用命令\includepdf[pages=1-3]{/tmp/figure.pdf} 选择多个数字
  • 我无法让它工作,主要是因为我有 png 文件,而且这是针对 pdf 文件优化的......
  • 我会为此使用其他工具,例如 ImageMagick montage *.png -tile 2x2 multipage.pdf

标签: r plot


【解决方案1】:

这里是聚合多个 png 文件的快速方法:

  1. 使用readPNG 读取您的png
  2. 将它们转换为栅格,并使用grid.raster 绘制它们:非常有效。

类似这样的:

library(png)
library(grid)
pdf('somefile1.pdf')
lapply(ll <- list.files(patt='.*[.]png'),function(x){
  img <- as.raster(readPNG(x))
  grid.newpage()
  grid.raster(img, interpolate = FALSE)

})
dev.off()

编辑:加载 png ,排列它们并将它们合并到同一个 pdf 中:

首先,您应该使用 rasterGrob 将您的 png 文件存储在 grobs 列表中:

plots <- lapply(ll <- list.files(patt='.*[.]png'),function(x){
  img <- as.raster(readPNG(x))
  rasterGrob(img, interpolate = FALSE)
})

然后使用出色的便捷功能marrangeGrob 保存它们:

library(ggplot2)
library(gridExtra)
ggsave("multipage.pdf", marrangeGrob(grobs=plots, nrow=2, ncol=2))

【讨论】:

  • 这非常适合将所有文件写入一个 pdf 文件。但是,我正在努力合并par(mfrow=c(2,2)) 之类的内容,以便每页获得不止一个图表...
  • 什么命令控制标题(...的第1页),目前标题的大小很大?
  • @baptiste:当我设置do.call(marrangeGrob, c(plots, list(nrow=2, ncol=2)), top=NULL) 时,这不会删除页数并给我一个错误。我怎样才能控制字体的大小或完全摆脱它?
  • 你想要list()中的所有选项
  • pdf(或任何其他)设备允许您将宽度和高度设置为您想要的任何值,因此如果您设置宽度>高度,那就是横向。我个人倾向于远离paper 设置。您可以通过 ggsave 传递所有这些选项。
猜你喜欢
  • 2017-08-12
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 1970-01-01
  • 2022-01-10
相关资源
最近更新 更多