ggplot2和sweave - plot是在Rplots而不是主pdf?

时间:2011-10-13 05:15:15

标签: r graphics ggplot2 sweave

我一直关注类似帖子的例子,但无济于事。 这是我看到的问题的一个例子。

保存在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中的图形。

我确定我犯了一个新手的错误,但我找不到它。有什么提示吗?

3 个答案:

答案 0 :(得分: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}

答案 1 :(得分:1)

查看R-Forge上提供的AFLP包中的ggsave.latex()函数

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输出。

答案 2 :(得分: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中建议的那样,一次创建多个图表,这一点并不太难。

最后(对阵水晶球......),我看到你在Rnw模式下使用Emacs,输入<给你<<>>=,光标位于中间,所以输入{{ 1}}给你<<