所以我使用Sweave创建pdf,其中包含一些有大量点数的图表。我可以很好地获得pdf,但似乎已经创建了大量的图层,因此很难在Acrobat或Reader中打开文件。当我这样做时,我真的可以看到文档上的点数。
有没有办法在Sweave中压扁pdf以使它不那么笨重?
(请注意,我正在使用RStudio。我知道我应该使用其他东西,但我还没有找到任何能够顺利运行的东西。)
答案 0 :(得分:5)
为此没有必要切换到Knitr,尽管这样做有很多好处。
一个解决方案就是安排生成情节文件然后自己包含它而不是依靠Sweave为你做这个
<<gen_fig, echo=true, eval=true>>=
png("path/to/fig/location/my_fig.png")
plot(1:10)
dev.off()
@
\includegraphics[options_here]{path/to/fig/location/my_fig}
另一种选择是考虑具有“吨点数”的情节是否有用 - 你能看到所有的观点吗?是兴趣点的密度吗?替代方案包括通过 hexbin 包进行绘图或生成点的2维密度,并将其绘制为较低密度的点集。 ggplot2 包内置了大量此功能,例如, <{3}}或stat__bin2d()
为例。
答案 1 :(得分:4)
正如已经提到的那样,您应该切换到knitr,这样可以更好地在pdf和其他格式之间进行交换。特别是,你应该看看:
以下是使用PNG设备的示例:
\documentclass{article}
\begin{document}
<<gen_fig, dev='png'>>=
n <- 100000
DF <- data.frame(x=rnorm(n), y=rnorm(n))
plot(DF)
@
\end{document}
无需为fig=TRUE
指定knitr
。如果graphics
包中的PNG设备的图像质量不够,您可以轻松切换到其他PNG设备,例如dev='CairoPNG'
或'Cairo_png'
。在Sweave中,您只需编写更多代码来执行相同的操作。
答案 2 :(得分:4)
正如Gavin所说,没有必要切换到knitr
,尽管还有其他优点。但是,您甚至不需要编写自己的保存和包含代码; Sweave可以为你做到这一点。如果初始文件是:
\documentclass{article}
\usepackage[american]{babel}
\begin{document}
<<>>=
n <- 100000
DF <- data.frame(x=rnorm(n), y=rnorm(n))
@
<<gen_fig, fig=TRUE>>=
plot(DF)
@
\end{document}
然后只需将参数更改为图块,就可以获得PNG而不是PDF:
<<gen_fig, fig=TRUE, png=TRUE, pdf=FALSE>>=
plot(DF)
@
在这个简单的例子中,它将我的最终PDF从685K缩小到70K。