2012-10-29 31 views
3

因此,我正在使用Sweave創建pdf,其中包含一些關於它們的點數的圖表。我可以很好地獲得PDF,但它似乎已經創建了很多層,所以很難在Acrobat或Reader中打開該文件。當我這樣做時,我幾乎可以看到文檔上的點加載。在Sweave中製作拼合的pdfs

有沒有辦法在Sweave中使pdf變平,這樣它就不那麼龐大了?

(請注意,我用的RStudio我知道,我也許應該用其他的東西,但我還沒有發現任何已經工作這麼順利呢。)

+0

您的圖形目前在使用什麼格式? – mnel

+0

...好問題?它們直接從R代碼生成。 – RickyB

+0

如果您使用的是默認設置,那麼它們是eps和pdf,請參閱http://www.statistik.lmu.de/~leisch/Sweave/FAQ.html我建議轉換爲'knitr',您可以在其中輕鬆指定設備並使用更小的'png'或'jpeg'。 – mnel

回答

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。

4

正如已經提到你可能應該進行切換到knitr,這使得在pdf和其他格式之間交換更好。特別是,你應該看看:

  • knitr之間的transition guide和sweave
  • global options:這樣你可以很容易的PDF文件,高分辨率PNG和低分辨率PNG格式之間進行切換。
  • caching:只在需要時生成數字。

下面是使用PNG裝置的一個例子:

\documentclass{article} 
\begin{document} 

<<gen_fig, dev='png'>>= 
n <- 100000 
DF <- data.frame(x=rnorm(n), y=rnorm(n)) 
plot(DF) 
@ 

\end{document} 

沒有必要爲knitr指定fig=TRUE。如果graphics包裝中的PNG設備的圖像質量不足,則可以輕鬆切換到其他PNG設備,例如, dev='CairoPNG''Cairo_png'。在Sweave中,你只需編寫更多的代碼來完成同樣的事情。

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-d密度並將其繪製爲密度較低的一組點。 ggplot2包內置了很多此功能,請參閱例如stat__bin2d()stat_binhex()