2012-11-21 73 views
1

我想模拟库存路径。我用22个交易日模拟了1000条路径(1个起始值)。现在我想将它包含到我的演示文稿中,但是动画,所以我需要png文件。循环错误 - plot.new尚未被调用

我想创建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行条目,这应该是1000个股票方式的模拟22个交易日。

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

+1

使用CRAN包[动画](http://cran.r-project.org/web/packages/animation/index.html),使您的生活更轻松 – Andrie

+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() 
} 
+0

woooohw!多谢老兄!这真的帮助了我。 @Erik Shilts这很聪明,有两个循环,我只是对自己感到愤怒,因为我从来没有想到过。 – user1690846

0

jpegplot都制作新图。如果您要动画构建而不是擦除,则只需在循环中调用lines。有一点,lines不需要type = 'l'。这是默认设置,命令的全部重点就是默认设置。如果你想用它绘制点,你可能会改变参数,否则就把它抛出去。