带有Sweave的for循环中的多个图

时间:2014-06-09 23:39:01

标签: r sweave

我在Sweave中的大块:

<<fig=TRUE,echo=FALSE>>=
for(i in 1:10) {
  plot(rep(i,10))
  dev.new()
}
@

在生成的pdf中,我只得到一个图(从第一次迭代开始)。我想打印所有10个地块。我究竟做错了什么?我尝试用dev.new()frame()替换plot.new(),但没有发生任何事情。

1 个答案:

答案 0 :(得分:10)

正如@rawr建议最简单的解决方案是切换到knitr (根本没有理由不这样做!)并将fig.keep="all"放入代码块选项中(如果您切换到knitr,则不再需要fig=TRUE ...包括数字自动生效,fig.keep="none"fig=FALSE的类似物

或者,如果你想坚持使用香草Sweave,请检查Sweave manual p。 17:

  

A.9从一个图形块创建多个数字不起作用

     

考虑您想要在类似于

的循环中创建多个图形
<<fig=TRUE>>
for (i in 1:4) plot(rnorm(100)+i)
@
  

这当前不起作用,因为Sweave每个图块只允许一个图形。原因很简单,Sweave在执行代码之前会打开一个postscript设备并将其关闭   然后。如果你需要在循环中绘图,你必须按照

的顺序编程
<<results=tex,echo=FALSE>>=
for(i in 1:4){
file=paste("myfile", i, ".eps", sep="")
postscript(file=file, paper="special", width=6, height=6)
plot(rnorm(100)+i)
dev.off()
cat("\\includegraphics{", file, "}\n\n", sep="")
}
@