【问题标题】:Inconsistent results saving png() and jpeg() in R在 R 中保存 png() 和 jpeg() 的结果不一致
【发布时间】:2011-12-30 12:05:17
【问题描述】:

我在 R 程序中保存了一些复杂的图形,包括 plot()lines()points()abline() 函数调用,并尝试使用 png()jpeg(),但两者都在渲染非常不一致的结果。在一次运行中,网格将保存在后台,在下一次则不会。在一次运行中,点将被添加到正确的lwd,在另一次运行中它们将是巨大的,或者可能根本不添加。在另一次运行中,将添加一行,然后在我再次运行时消失。我循环了数百次迭代,几乎每次运行都得到不同的结果。

png(paste("/someFilePlace/pics/", propIn, ".png", sep = "")) 

plot(plotDat$yhat, col = "white", ylim = c(0,max(plotDat$yhat)*1.1),xaxt='n') 
fairlylightgray <- rgb(204/255, 204/255, 204/255, alpha=0.4) 
abline(v=(seq(0,1700,100)), col=fairlylightgray, lty="dotted") 
abline(h=(seq(0,10,0.5)), col=fairlylightgray, lty="dotted") 
points(plotDat$y, cex = '*', lwd = 3, col= "gray") 
lines(plotDat$yhat, col = "#08519C") 
axis(1, at = c(1,500,1000,1500), 
     labels = c(plotDat$dt[1],plotDat$dt[500],plotDat$dt[1000],plotDat$dt[1500])) 

dev.off()

【问题讨论】:

  • 如果您希望任何人能够真正帮助您,您需要在此处包含一些代码。
  • 您是否使用 bitmap() 来保存为 png 和/或 jpg?你在使用ghostscript吗?检查这个link
  • 这里是代码。结果也是打印到屏幕不一致,所以不仅仅是渲染问题:
  • 代码在哪里?东西会从 cmets 中过滤出来,因此请将其编辑到您的问题中。
  • 这是我们无法重现的(请参阅tinyurl.com/reproducible-000),这非常令人惊讶。 R 产生这种非确定性的结果一定是非常严重的错误……并不是说它应该表现得那么糟糕,而是你是在代码中生成伪随机数,还是你期望是每次都完全得到相同的结果?

标签: r graphics png jpeg


【解决方案1】:

恭喜,我想你可能已经发现了一个晦涩难懂的错误(至少,未能拦截用户错误)。尝试将 cex="*" 替换为代码中合理的内容(它应该是一个数字 - 或者您的意思可能是 pch="*")。

我能够在不同的 PNG 中得到不同的结果,如下所示(如果我在 X11 窗口中绘图,我可以在调整窗口大小时发生有趣的事情)。

for (i in 1:10) { 
    png(paste("tmp",i,"png", sep="."))
    plot(1:10,1:10,cex="*"); 
    dev.off() 
}

【讨论】:

  • 这真的很奇怪。 FWIW,在 Windows 中绘制到 GUI 设备时,我也会得到调整大小的奇怪效果。
  • 谢谢本,我很感激。我使用 cex="*" 符号来获得可扩展的点。
  • 我会在编写更多测试代码后将此转发给 r-devel。吉姆:你想做什么,它记录在哪里? cex="*" 符号我从未见过……?par 中的文档说“一个数值……”——没有任何关于"*" 的可能性……
  • 不错的收获!我可以重现在plot 中将字符传递给cex 的不一致行为,但如果我尝试par(cex = "*"),则会出现错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-08
  • 1970-01-01
  • 2022-08-02
相关资源
最近更新 更多