将 PNG 绘图写入 R 中的 PDF 文件



我必须创建一堆包含大量数据点的图形。到目前为止,我一直通过将所有这些绘制到一个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图形并将它们插入pdf knitr之外,有没有办法做到这一点(我认为这对于如此简单的工作来说太乏味了)?

你可以

  1. 创建每个绘图的.png文件
  2. 使用 png 包重新读取这些内容,然后
  3. 使用 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()

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

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

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

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

pdftk *.png.pdf output all.pdf

最新更新