【问题标题】:Multiple plots in a for loop with Sweave使用 Sweave 的 for 循环中的多个绘图
【发布时间】:2014-06-09 23:39:00
【问题描述】:

我在 Sweave 中的块:

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

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

【问题讨论】:

  • 试试fig.keep = 'all'

标签: r sweave


【解决方案1】:

正如@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="")
}
@

【讨论】:

  • 第一次使用后我必须承认 - knitr 和 markdown 很棒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多