Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 通过过滤隐藏对象减少打印的PDF文件大小_R_Pdf_Vector_Plot_Ggplot2 - Fatal编程技术网

R 通过过滤隐藏对象减少打印的PDF文件大小

R 通过过滤隐藏对象减少打印的PDF文件大小,r,pdf,vector,plot,ggplot2,R,Pdf,Vector,Plot,Ggplot2,在生成R中多个点的散点图时(例如使用ggplot()),可能有许多点位于其他点之后,根本不可见。例如,请参见下图: 这是一个几十万个点的散点图,但大多数都在其他点的后面。问题是,当将输出强制转换为矢量文件(例如PDF文件)时,不可见的点会使文件变大,并在查看文件时增加内存和cpu使用率 一个简单的解决方案是将输出转换为位图图片(例如TIFF或PNG),但它们会失去矢量质量,甚至会变得更大。我尝试了一些在线PDF压缩器,但结果与我的原始文件大小相同 有什么好办法吗?例如,通过编辑PDF文件过滤不

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

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

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


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

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

pdf2ps input.pdf output.ps
ps2pdf output.ps output.pdf
出于某种原因,它的工作效率相当高


你可以在网站上看到一些讨论

首先,您可以执行以下操作:

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)
set.seed(42)

DF简单地将绘图保存为高分辨率的
png
文件将极大地减少大小,同时保持足够好的质量。至少我从来没有收到过杂志对我发送给它们的任何png的抱怨,只要确保使用>600 dpi。

推荐的解决方案是hexbin绘图。但是,在hexbin绘图中,颜色表示每个bin中的值的数量,并且您似乎将颜色用于其他内容。+1表示hexbin。其他选项包括
sunflowerplot
bigvis
软件包:@Roland是的,正如您所猜测的,点的颜色是有意义的,因此对于我来说,hexbin不是一个好的解决方案。如果颜色有意义,您希望如何处理隐藏在彼此后面的不同颜色的点?我认为这不是一个好的情节。我有点怀疑“隐藏”点是否重要。如果这是真的,那么您应该在早些时候将它们从分析中删除。我倾向于建议对此类绘图使用部分透明,例如
color=#FF00FF44
,以便了解数据点的密度。谢谢,但它们的大小完全相同,可能是因为初始PDF文件是矢量文件而不是位图文件。我尝试了几种你的ask ubuntu链接的解决方案。我们可以先将X和Y值除以我们希望的点之间的最小水平/垂直距离,然后对其进行四舍五入,然后过滤掉重复项:
temp+1以获得四舍五入的好主意!这是一个非常好的解决方案,大大减少了我的PDF大小。非常感谢
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)