我的Sweave代码块:
<<fig=TRUE,echo=FALSE>>=
for(i in 1:10) {
plot(rep(i,10))
dev.new()
}
@
在生成的pdf中,我只得到了一个图形(来自第一次迭代)。我希望打印出所有10个图形。我做错了什么? 我尝试用
frame()
和plot.new()
替换dev.new()
,但没有任何反应。如@rawr所建议,最简单的解决方法是切换到knitr
(实际上没有任何理由不这样做!)并在代码块选项中加入fig.keep="all"
(如果您切换到knitr
,您就不再需要fig=TRUE
了…包括图形的工作是自动进行的,fig.keep="none"
是fig=FALSE
的类比)
或者,如果您想继续使用原始的Sweave,请查看Sweave手册第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="")
}
@
fig.keep = 'all'
- rawr