2017-03-06 19 views
1

次のコードは画像を生成します。問題ない。エラー:plot.newはまだ呼び出されていません

change <- function(score, d, k, p) {k*(score - 1/(1+k^(d/p)))} 
parameters <- c(10:110) 
colorshelf <-rainbow(length(parameters), start=1/6) #yellow is low 
for(i in seq_along(parameters)) { 
    curve(change(score=1, d=x, k=parameters[i], p=-800), from=-500, to=500, add=T, ylim=c(0, 100), col=colorshelf[i], xlab="rating difference", ylab="gain for winning") 
} 
legend.index <- round(quantile(seq_along(parameters))) 
legend.param <- legend.index + min(parameters) 
legend.color <- colorshelf[legend.index] 
legend("right", title="k-factor", lty=c(1,1), legend=legend.param, col=legend.color) 

ここで、指定した解像度でファイルに画像を保存します。だから私は、追加:

png(filename="gain by ratingdiff.png", res=30, width = 1000, height = 1000) 

dev.off() 

コードブロックの前と後。しかし、その後、私は2つのエラーが発生し、のplot.newはまだ呼び出されていません。

私はこの問題が何百万回も起こったことを知っています。そして、stackoverflow上のこれについての多くの記事がここにあります。しかし、これらのどれも本当に私を助けませんでした。コード内の別の場所にplot.new()を追加しようとしました。しかし、それは役に立たなかった。

"この関数(フレームはplot.newのエイリアスです)は、現在のプロット(存在する場合)でプロットが完了し、新しいプロットに進むこれはすべてのハイレベルプロット関数で使用され、複数図形領域が使用されている場合はプロットをスキップするのにも役立ちます。つまり、私はすべてのグラフィックデバイスを描画したいので、なぜコードの最後を除いて、プロットの完了を引き起こしたいのでしょうか?

他にも、RStudioの使用に関連する問題がありますが、私はRStudioを使用していません。私はNppToRと組み合わせてNotepad ++を使います。

また、誰かがコードブロックの周りに{}を追加することを提案しました(機能しませんでした)。

助けてください。

+1

あなたの 'for'ループの前に' plot(NA、xlim = c(-500、500)、ylim = c(0、100)) 'を入れたらどうなりますか?問題は '曲線' _は曲線に曲線を追加しますが、最初はプロットしていないということです。 – Axeman

+0

甘い。それでおしまい。それを答えると、他の人にも役立つかもしれません。 –

+0

しかし、まだファイルに保存しないと、なぜそれがうまくいくのだろうかと私は不思議に思います。標準のグラフィックスデバイスでもプロットは必要ありませんか?何故なの? –

答えて

1

curve()を使用する前に、plot()を実行する機能が必要です。そのため、プロットを保存するときに問題が発生します。実行する前に

:あなたはあなたのイメージをrerpesentするのに便利余白、ラベルや情報を与えるplot()を実行する必要が

for(i in seq_along(parameters)) { 
     curve(change(score=1, d=x, k=parameters[i], p=-800), from=-500, to=500, add=T, ylim=c(0, 100), col=colorshelf[i], xlab="rating difference", ylab="gain for winning")} 

関連する問題