2011-10-13 19 views
2

我一直在類似的帖子上的例子,但無濟於事。 這是我看到的問題的一個例子。ggplot2和sweave - 劇情是在Rplots而不是主要的pdf?

保存在tmp.Rnw:

\documentclass[10pt]{article} 
\title{Reproducible Example} 
\begin{document} 
\maketitle 
\begin{center} 

<<echo=FALSE,results=hide>>= 
library(ggplot2) 
plot.to.print = qplot(1:10, 1:10) 
@ 

\section{No Figure Below This Section Title} 
<<<fig=true>>= 
print(plot.to.print) 
@ 

\end{center} 
\end{document} 

在tmp.co.r,我把下面的代碼:

Sweave("tmp.Rnw",stylepath=T) 

我創建了TEX文件是這樣的:

/../../2.12.1/bin/R --no-save < tmp.co.r 

然後在出來的tmp.tex文件上使用pdflatex。

結果是tmp.pdf,其中包含標題,節名和R代碼,但沒有圖。不過,還會生成Rplots.pdf文件,其中包含我想要的tmp.pdf圖。

我確定我在做一個新手的錯誤,但我找不到它。有小費嗎?

+0

你有沒有試過給圖形塊命名? – baptiste

回答

1

問題是你的額外<在你的無花果塊。

這導致它看起來像<fig=TRUE,所以fig實際上沒有正確設置爲TRUE。您會注意到您的.tex文件中沒有正確的includegraphics行。

爲什麼你得到Rplots.pdf有點複雜,但值得了解。首先,創建圖形的每個塊都會爲每個所需的圖形類型執行一個額外的時間。因此,如果您只是製作pdf(目前的默認設置,我認爲),它會運行兩次;如果你製作pdf和eps的話,它會運行三次。第一次運行時,它不需要打開圖形設備即可運行;實際上我不確定它爲什麼會在那個時候運行,但它確實如此。對於多個文件,需要分別運行它,每個文件依次打開。

因此,最好的做法是做你所做的事,並運行所有代碼創建一個塊,然後用fig=TRUE繪製塊中的數字;這最大限度地減少了多次運行的代碼。但是,請注意您是使用隨機數還是增加fig=TRUE塊中的某些內容;因爲它運行多次,行爲可能不會是你所期望的。其次,創建圖形的代碼在未指定圖形設備的情況下運行時,無論如何都會打開默認圖形類型以供代碼使用。當你以交互方式運行時,這會彈出帶有圖片的窗口。當以非交互方式運行時,默認通常是打開一個pdf文件,默認名稱是Rplots.pdf。由於所有創建數字的塊都會發生這種情況,因此該文件最終會成爲一個包含您在其中創建的所有圖形的多頁PDF。

最後,使用R代碼而不是fig=TRUE機制創建圖的方法有時可能是首選,因此代碼只能運行一次;通常會多一些簿記,儘管可以通過創建幫助功能來最小化。顯然,AFLP包(請參閱Thierry的答案)具有這樣的功能,儘管我從未使用它。儘管如此,如果您願意,也可以自己編寫自己的代碼,類似於Sweave FAQ A.9中建議的一次創建多個地塊。

最後(窺視水晶球......),我看到你使用Emacs在RNW模式,其中輸入<給你<<>>=光標在中間,所以打字<<給你<<<>>=

+0

謝謝!這是額外的「<」,是的,這是因爲我在Rnw模式下使用Emacs。 – khoda

2

試試這個

<< label = figPlot1, include = FALSE >>= 
plot.to.print = qplot(1:10, 1:10) 
print(plot.to.print) 
@ 


\begin{figure} 
\begin{center} 
<< label = fig1, fig = TRUE, echo = FALSE >>= 
<<figPlot1>> 
@ 
\end{center} 
\caption{Your Caption} 
\label{fig:figPlot1} 
\end{figure} 
+0

產生相同的輸出。帶圖的Rplots.pdf,帶文本的tmp.pdf。 – khoda

+0

@Khoda:看到我編輯的答案。 – MYaseen208

1

看一看從AFLP包ggsave.latex()函數,它是可在R-Forge的

install.packages("AFLP", repos="http://R-Forge.R-project.org") 

那麼你的Sweave文件,簡化了這一

\documentclass[10pt]{article} 
\title{Reproducible Example} 
\begin{document} 
\maketitle 

<<echo=FALSE,results=hide>>= 
library(ggplot2) 
#just imports the function you need without loading the entire package 
ggsave.latex <- AFLP:::ggsave.latex 

plot.to.print = qplot(1:10, 1:10) 
@ 

\section{No Figure Below This Section Title} 
<<result = tex>>= 
ggsave.latex(plot.to.print, caption = "Your caption", label = "ThisIsTheLabel") 
@ 
\end{document} 

請注意,ggsave.latex將爲您設置圖形環境。這允許在一個塊內創建多個數字和/或其他LaTeX輸出。

相關問題