1

ストックパスをシミュレートしたい。22 取引日 (1 開始値) で 1000 パスをシミュレートしました。これをプレゼンテーションに含めたいのですが、アニメーション化するので、png ファイルが必要です。

最初のストック パスから始めて、2 番目のストック パスなど、1000 個の png ファイルを作成したいと考えています。

したがって、最初のパスから始めて、プロットに 2 番目を追加し、3 番目を追加するなどして、最後に 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

2つの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アニメーションを消去せずにビルドしたい場合は、ループ内で呼び出しを行う必要があります。1つは、lines必要ありませんtype = 'l'。これがデフォルトであり、コマンドの要点はそれがデフォルトであるということです。それを使用してポイントをプロットしたい場合は、引数を変更することができますが、それ以外の場合は省略します。

于 2012-11-21T18:02:52.310 に答える