我必须创建一堆包含大量数据点的图表。到目前为止,我一直在将所有这些绘制成一个pdf
- 文件:
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
之外(我认为这对于这么简单的工作来说太繁琐了)?
答案 0 :(得分:15)
你可以
png
包来读取这些内容和grid.arrange
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()
答案 1 :(得分:5)
如果问题的根源是图中的点太多,那么您可能需要考虑使用六边形分级而不是常规的散点图。您可以使用bioconductor中的hexbin包,或者ggplot2包也具有六边形装箱功能。无论哪种方式,在直接创建pdf文件时,您可能会获得更有意义的绘图以及更小的文件大小。
答案 2 :(得分:3)
您可以使用ImageMagick
将PNG文件转换为PDFfor i in *.png
do
convert "$i" "$i".pdf
done
并将生成的文件与pdftk连接起来。
pdftk *.png.pdf output all.pdf