我有一个for循环,它产生一系列绘图,并希望将每个绘图绘制到一个文件中,例如this answer中。问题是我实际上并没有在每次新迭代中都创建一个新图,而是在现有画布上插入一条重叠线。代码和错误示例如下:
for(i in 1:10){
png(filename = paste0("~/image", i))
if(i == 1){
plot(runif(10))
}else{
lines(runif(10))
}
dev.off()
}
错误消息:
Error in plot.xy(xy.coords(x, y), type = type, ...) :
plot.new has not been called yet
我知道这是因为未重新创建画布,但不知道如何克服此问题。我尝试使用dev.print()也没有成功。
答案 0 :(得分:1)
当前,您正在循环的每次迭代中创建一个新的png
设备。您需要进行一些移动,以便创建设备,然后在循环外部将其关闭,因为您只需要执行一次即可:
png(filename = paste0("~/image", 1))
for(i in 1:10) {
if(i == 1) {
plot(runif(10))
} else {
lines(runif(10))
}
}
dev.off()
答案 1 :(得分:0)
针对修订后的问题,有两种解决方案。要保存一系列带有连续添加的行的图像文件,可以使用node.material.uniforms.MatDiff2.value = texture;
。您必须向呼叫添加更多详细信息。以下是本着您的逻辑精神的解决方案:
dev.print
如果可以在打印前获取结果,则不必猜测图的极限。这是一个允许使用for (i in 1:10) {
if (i == 1)
plot(runif(10)) # this could have inadequate y-limits
else {
lines(runif(10))
}
fn <- paste0("~/image", i, ".png")
dev.print(png, fn, width = 5, height = 5, unit = "in", res = 96)
}
的解决方案,其中首先生成(或获取)数据。
png()