通过过滤隐藏的对象来减少绘图的PDF文件大小

时间:2013-05-21 08:31:28

标签: r pdf vector plot ggplot2

在R中生成许多点的散点图(例如,使用ggplot())时,可能有许多点落后于其他点并且根本不可见。例如,见下图:

enter image description here

这是几十万点的散点图,但大多数都落后于其他点。问题是当将输出转换为矢量文件(例如PDF文件)时,不可见点会使文件大小变大,并在查看文件时增加内存和CPU使用率。

一个简单的解决方案是将输出转换为位图图片(例如TIFF或PNG),但它们会失去矢量质量,并且可能会更大。我尝试了一些在线PDF压缩器,但结果与原始文件大小相同。

有什么好的解决方案吗?例如,某些方法可以过滤不可见的点,可能是在生成绘图期间或之后通过编辑PDF文件?

3 个答案:

答案 0 :(得分:11)

首先,您可以这样做:

set.seed(42)
DF <- data.frame(x=x<-runif(1e6),y=x+rnorm(1e6,sd=0.1))
plot(y~x,data=DF,pch=".",cex=4)

enter image description here

PDF尺寸:6334 KB

DF2 <- data.frame(x=round(DF$x,3),y=round(DF$y,3))
DF2 <- DF[!duplicated(DF2),]
nrow(DF2)
#[1] 373429
plot(y~x,data=DF2,pch=".",cex=4)

enter image description here

PDF大小:2373 KB

通过舍入,您可以控制要删除的值的数量。您只需要修改它来处理不同的颜色。

答案 1 :(得分:4)

简单地将绘图保存为高分辨率png文件将极大地缩小尺寸,同时保持质量足够好。至少我从未有过期刊抱怨我发送的任何png,只要一定要使用&gt; 600 dpi。

答案 2 :(得分:0)

我认为可以通过对pdf文件进行一些后期处理来完成。在linux中,如果我必须减少pdf,我会做

pdf2ps input.pdf output.ps
ps2pdf output.ps output.pdf

由于某种原因非常有效。

您可以在https://askubuntu.com/questions/113544/how-to-reduce-pdf-filesize看到一些讨论。

相关问题