2010-07-21 49 views
13

我想創建一個包含一些圖形與ggplot2完成的sweave報告。雖然我在尋找,從長遠來看一下環境 - 我只是用一個簡單的.Rnw此文件只包含的代碼,不幸的是,圖中未創建情節sweave和ggplot2:完全沒有生成PDF

\documentclass[a4paper]{article} 
\SweaveOpts{echo=FALSE} 
\usepackage{a4wide} 

    \begin{document} 

    \begin{figure}[htbp] 
    \begin{center} 
<<>>= 
library(ggplot2) 
x=rnorm(100) 
qplot(x) 

@ 
\caption{My Graph} 
\end{center} 
    \end{figure} 
\end{document} 

,我只得到一個損壞的.PDF和.eps文件。雖然我得到一個很好的.tex文件,除了圖形外,它似乎可以正常工作。 我用下面的基本代碼來創建它:

Sweave("myfile.Rnw") 

我剛剛發現,在討論的透明度和sweave/GGPLOT2但沒有什麼可以幫助的問題在網絡上一些老的帖子。我也嘗試了輕鬆的包裝,這也沒有幫助。順便說一句,有沒有關於decumar包的消息?

+1

Decumar在過去的幾天裏一直處於沉重的發展階段,實際上可能已經接近可以發佈的階段。 – hadley 2010-07-22 19:05:04

+0

耶!這是我的一天。我真的很期待測試它! – 2010-07-22 19:41:04

回答

19

qplot()產生對象,而不是圖形輸出。它可能看起來就像它在運行時那樣,但是這是因爲沒有分配,R會自動打印qplot()的輸出。要將它集成到Sweave中,請將print()包裝在qplot()左右,或將qplot()的輸出分配給某個東西,然後將其包裝在print()中。

... 
<<fig = T, echo = F>>= 
library(ggplot2) 
x=rnorm(100) 
p <- qplot(x) 
print(p) 
@ 
... 

這應該工作。我始終在我的sweave文檔中使用ggplot2圖形。

+0

thx人。開始總是最難的......從來沒有想過這樣,因爲我之後只用了qplot()和ggsave。 – 2010-07-21 23:40:37

3

你必須圍繞print()包裝它,使其工作在sweave。

1

其實,雖然以前的答案都是正確的,但你的問題是另一回事。

您需要確保整個代碼塊位於頁面的左側(除函數中的Iundentation外)。再次,我不知道爲什麼,但這會給Sweave帶來問題。

確保所有代碼(以及代碼塊的頁眉/頁腳)位於頁面左側(並添加了打印語句)後,您的示例適用於我。順便說一句,我今天知道你可以在你的代碼中創建一個在sweave文檔中的環境(我沒有意識到這點,並且會爲我節省很多時間)。良好的舊的計算器,即使你回答一個問題,也能教會你新的東西!

希望這會有所幫助。