在Sweave中制作扁平的pdf

时间:2012-10-29 04:35:14

标签: r pdf latex sweave rstudio

所以我使用Sweave创建pdf,其中包含一些有大量点数的图表。我可以很好地获得pdf,但似乎已经创建了大量的图层,因此很难在Acrobat或Reader中打开文件。当我这样做时,我真的可以看到文档上的点数。

有没有办法在Sweave中压扁pdf以使它不那么笨重?

(请注意,我正在使用RStudio。我知道我应该使用其他东西,但我还没有找到任何能够顺利运行的东西。)

3 个答案:

答案 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。