在Sweave / latex中绘制一个循环的图

时间:2013-11-30 14:40:28

标签: r plot latex sweave

假设我有一个功能

plotSingle <- function(x) {
   plot(x)
}

我想在Sweave的循环中使用它来生成20页,每页有1个绘图。例如:

\begin{figure}[htb]
\caption{}
\centering
<<fig=TRUE,echo=FALSE>>=
for(loop in 1:20) {
    plotSingle(loop)
    cat('\\newpage')
}
@
\end{figure}

然而,这只会在1页上生成1个图,而不是我在之后的20页20个。

如何调整上述Sweave代码以实现我的目标?

1 个答案:

答案 0 :(得分:0)

您应该添加plot.new或其别名frame(),而不需要cat('\\newpage')

<<,fig=TRUE,echo=FALSE>>=
plotSingle <- function(x) {
   plot.new()   ##  ~ frame()
   plot(0)
}
for(i in 1:3) plotSingle(mtcars)
@
带布局的

编辑

我认为knitr在找到相同的情节陈述时会做一些优化。那个

<<,echo=FALSE>>=

plotSingle <- function(x) {

   layout(matrix(1:3,nrow=3))
   plot(0,main=x)          ## the 3 plots statement here are different
   plot(1,main=x)          ## you can just change the title also and it will works
   plot(2,main=x)          ## keep in mind to give knitr different plot statement.

}

 for(i in 1:5)  plotSingle(i)  ## you have also to give different iodex here
                               ## plotSingle(0) will not work for example.
@