在R中将png图写入pdf文件

Posted

技术标签:

【中文标题】在R中将png图写入pdf文件【英文标题】:writing png plots into a pdf file in R 【发布时间】:2013-09-22 01:00:22 【问题描述】:

我必须创建一堆包含大量数据点的图表。到目前为止,我一直在通过将它们全部绘制到一个 pdf-file 中来做到这一点:

pdf("testgraph.pdf")  
par(mfrow=c(3,3))

for (i in 2:length(names(mtcars)))
  plot(mtcars[,1], mtcars[,i])


dev.off()

但是,如果有很多数据点,pdf 文件就会变得太大。因为我对出色的质量不感兴趣,所以我不在乎我的情节是否是矢量图形。所以我想将这些图创建为png,然后将它们插入到pdf 文件中。除了创建R 图表并将它们插入pdfknitr 之外,还有其他方法吗(我认为对于这样一个简单的工作来说太乏味了)?

【问题讨论】:

我写了一些代码in this answer可能会感兴趣。 @Roland 感谢您的有趣建议。 【参考方案1】:

你可以

    为每个绘图创建 .png 文件 使用png 包重新读取这些内容并 使用grid.arrange将它们绘制成pdf
library(png)
library(grid)
library(gridExtra)

thePlots <- lapply (2:length(names(mtcars)), function(i) 
  png("testgraph.png")
  plot(mtcars[,1], mtcars[,i])

  dev.off()
  rasterGrob(readPNG("testgraph.png", native = FALSE),
    interpolate = FALSE)
)

pdf("testgraph.pdf")
do.call(grid.arrange, c(thePlots, ncol = 3))
dev.off()

【讨论】:

由于某种原因,library(png) 行终止了帖子其余部分的格式... 太好了,谢谢,这正是我想做的!然而,令我惊讶的是,事实上生成的pdf 文件变得更大了……没想到会这样。我想我将不得不研究其他选项以减少此处建议的地块大小。 @BenBarnes:您遇到的格式问题描述为here。 我使用这种技术绘制多个地图,在这种情况下,生成的 pdf 比直接绘制到 pdf 小得多。在您的情况下,在绘图之前降低数据复杂性听起来是个好主意。【参考方案2】:

如果问题的根源是图中的点太多,那么您可能需要考虑使用六边形分箱而不是常规散点图。您可以使用 bioconductor 的 hexbin 包,或者 ggplot2 包也具有六边形分箱功能。无论哪种方式,在直接创建 pdf 文件时,您都可能会获得更有意义的绘图以及更小的文件大小。

【讨论】:

你是对的,这可能是另一种选择,谢谢!我必须尝试这里的建议,才能找到最适合我的数据的方法。【参考方案3】:

您可以使用ImageMagick将PNG文件转换为PDF

for i in *.png
do
  convert "$i" "$i".pdf
done

并将生成的文件与pdftk 连接起来。

pdftk *.png.pdf output all.pdf

【讨论】:

谢谢,但我想坚持R 而不使用任何其他软件。

以上是关于在R中将png图写入pdf文件的主要内容,如果未能解决你的问题,请参考以下文章

R - 如何在 R 中读取多个 png 文件并编织成 pdf?

R语言可视化结果图片保存实战:将图片保存为pdf文件 R语言将图片保存为png文件 R语言使用ggsave将图片保存为png文件或者pdf文件

R语言可视化结果图片保存实战:将图片保存为pdf文件 R语言将图片保存为png文件 R语言使用ggsave将图片保存为png文件或者pdf文件

R:如何将绘图/图形导出为 png 或 pdf 文件

在java中将HTML表格写入PDF [重复]

在 C++ 中将缓冲区写入 PDF