2011-10-13 17 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输出。

相关问题