以下代码生成图像。没问题。
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()的帮助页面显示: &#34;此函数(frame是plot.new的别名)导致完成当前绘图中的绘图(如果有)并前进到新的图形框架。这用于所有高级绘图功能,也可用于在使用多图形区域时跳过绘图。 &#34;
但这真的是我想要的吗?我的意思是,我想在一个图形设备中绘制所有内容,为什么我想要完成绘图,除了可能在代码的末尾。
其他人提出,问题与RStudio的使用有关,但我不使用RStudio。我将Notepad ++与NppToR结合使用。
另外,有人建议在代码块周围添加{}(不起作用)。
请帮忙。
答案 0 :(得分:2)
在使用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()
,以便为重新制作图片提供有用的边距,标签和信息。