我必须创建一堆包含大量数据点的图形。到目前为止,我一直通过将所有这些绘制到一个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
之外,有没有办法做到这一点(我认为这对于如此简单的工作来说太乏味了)?
你可以
- 创建每个绘图的.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()
如果问题的根源是图中的点太多,则可能需要考虑使用六边形分箱而不是常规散点图。 您可以使用生物导体的六边形封装,或者 ggplot2 封装也具有六边形分档功能。 无论哪种方式,在直接创建pdf文件时,您都可能会获得更有意义的绘图以及更小的文件大小。
您可以使用 ImageMagick 将 PNG 文件转换为 PDF
for i in *.png
do
convert "$i" "$i".pdf
done
并将生成的文件与 pdftk 连接起来。
pdftk *.png.pdf output all.pdf