2017-03-06 142 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() 

之前和代碼塊之後。但後來我得到兩個錯誤,抱怨plot.new尚未被調用

我知道這個問題出現了上百萬次。在這裏有很多關於這個在stackoverflow上的帖子。但是這些都沒有幫助我。我嘗試在代碼中的不同位置添加plot.new()。但是這並沒有幫助。

plot.new()上的幫助頁面顯示如下: 「此函數(frame是plot.new的別名)導致當前繪圖(如果有的話)中的繪圖完成並且前進到新的圖形框架,用於所有高級繪圖功能,當使用多圖區域時也可用於跳過繪圖。「

但是,這真的是我想要的嗎?我的意思是,我想在一個圖形設備中繪製所有東西,那麼爲什麼我想要導致繪圖的完成,除了可能在代碼的末尾。

其他人提出的,問題與RStudio的使用有關,但我不使用RStudio。我將Notepad ++與NppToR結合使用。

此外,有人建議圍繞代碼塊添加{}(沒有工作)。

請幫忙。

+1

如果你在'for'循環之前加上'plot(NA,xlim = c(-500,500),ylim = c(0,100)),該怎麼辦?問題在於'曲線'與曲線有一條曲線,但你沒有開始的曲線。 – Axeman

+0

甜。而已。讓它成爲答案,它也可能幫助其他人。 –

+0

然而,當我不將它保存到一個文件時,仍然有點奇怪爲什麼它會起作用。標準圖形設備是否也不需要這種情節?爲什麼不? –

回答

1

使用前curve()功能需要運行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")} 

你需要運行plot()給予rerpesent您的圖像有用的利潤率,標籤和信息。