1

我想模拟股票路径。我用 22 个交易日(1 个起始值)模拟了 1000 条路径。现在我想将它包含在我的演示文稿中,但是是动画的,所以我需要 png 文件。

我想创建 1000 个 png 文件,从第一个库存路径开始,然后是第二个,依此类推。

所以我从第一个路径开始,在图中添加第二个,添加第三个等等,所以最后我有一个包含 1000 个模拟的图,这是我的代码:

for(i in 1:1000){
#jpeg(paste("1000s",i,".png",sep=""))
plot(c(1:23),matrix[,1],type="l",ylim=c(17,24))
lines(c(1:23),matrix[,i],type="l",col=i)
#dev.off()
}

这是问题所在,当循环到达下一个值时,每个附加部分都会消失,所以我尝试了:

plot(0,0 , xlim=c(1,23),ylim=c(17,24),xlab="",ylab="")
for(i in 1:1000){
jpeg(paste("1000s",i,".png",sep=""))
lines(c(1:23),matrix[,i],type="l",col=i)
dev.off()
}

(我知道这不是一个可行的示例,但我的问题只是循环的逻辑问题)我在最后一个代码时收到以下错误消息:尚未调用 plot.new。

该矩阵有 1000 列和 23 行条目,这应该是 22 个交易日的 1000 次股票路径模拟。

如何更改该错误不再出现?谢谢!

4

2 回答 2

1

使用两个for循环。外部循环将创建每个 png/jpeg。内部的将建立每个单独的情节。

for(i in 1:1000) {
  jpeg(paste("1000s", i, ".png", sep=""))
  plot(0, 0, xlim=c(1,23), ylim=c(17,24), xlab="", ylab="")

  for(j in 1:i) {
    lines(c(1:23), matrix[, j], col=j)
  } 
  dev.off()
}
于 2012-11-21T18:07:59.177 回答
0

jpeg并且plot都制作了新的图表。lines如果您希望动画构建而不是擦除,您只需要在循环中调用。一件事,lines不需要type = 'l'。这是默认设置,命令的重点是默认设置。如果你想用它来绘制点,你可能会改变论点,否则就把它排除在外。

于 2012-11-21T18:02:52.310 回答