8

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

在此处输入图像描述

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

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

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

4

3 回答 3

12

作为开始,您可以执行以下操作:

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)

在此处输入图像描述

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)

在此处输入图像描述

PDF 大小:2373 KB

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

于 2013-05-21T11:12:16.727 回答
4

简单地将绘图保存为高分辨率png文件将大大减少尺寸,同时保持质量足够好。至少我从来没有让期刊抱怨我发送给他们的任何 png,只要确保使用 > 600 dpi。

于 2013-05-21T12:04:22.537 回答
0

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

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

出于某种原因,这非常有效。

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

于 2013-05-21T09:32:06.580 回答