使用新行将图保存到R中的磁盘时出现问题

时间:2019-06-05 01:21:55

标签: r plot

我有一个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()也没有成功。

2 个答案:

答案 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()