繁体   English   中英

ggsave png 错误较大

[英]ggsave png error with larger size

我正在保存一个多面的 ggplot2 图,它可以很好地以较小的尺寸保存,但是当我想增加它时失败了。

> ggsave("tst.png",height=6.75,width=9)
# works fine

> ggsave("tst.png",height=9,width=12)
Error in grDevices::png(..., width = width, height = height, res = dpi,  : 
  unable to start device
In addition: Warning messages:
1: In grDevices::png(..., width = width, height = height, res = dpi,  :
  Unable to allocate bitmap
2: In grDevices::png(..., width = width, height = height, res = dpi,  :
  opening device failed

我以前用 ggsave 保存过这种大小的 png,有什么想法为什么它不起作用?

可重现的例子:

library(car)
qplot(education,data=Vocab,geom="density",colour=sex)+facet_wrap(~year)

注意:在 Windows 7 64 位上使用 R 2.12.1,此问题已消失。 如果您遇到此问题,请首先尝试更新您的 R 版本。

在另一个问题中再次出现问题后,我在新系统上重新运行了我的测试代码,看看错误是否消失了,确实如此。


编辑:为什么底层代码可以工作的诀窍是它使用的分辨率仅为 72 dpi 而不是 300dpi,这是我相信的ggsave()标准。

所以ggsave("tst.png",height=9,width=12,dpi=72)可以做到这一点。

但如果它不能接受,你真的必须有一个疯狂的阴谋。 据我猜测,问题与显卡有关(源自Ripley 教授的这条消息)。

如果分辨率有问题,您最好使用矢量化格式,如 eps 或 pdf。


编辑 2:

显然,某处存在涉及某种内存泄漏的错误? 给出以下代码:

library(car)
library(ggplot2)
qplot(education,data=Vocab,geom="density",colour=sex)+facet_wrap(~year)
setwd("G:/Temp")
i<-1
while(1){
  tryCatch(ggsave("tst.png",height=9+i,width=12+i),error=function(e) {print(i);stop(e);})
  i <- i+1
}

这对我来说运行良好,直到我达到大约 9,然后我得到你得到的错误。 下次尝试运行代码时,再次从i=1 ,都会出现相同的错误。 尝试使用png()dev.off()再次给出相同的错误。 似乎内存的某些部分已填满而未被清空,从而有效地阻止了保存另一个 png 文件。 对我来说gc()也没有做任何事情。 即使关闭 R 并再次重新打开也不起作用。

它使用ggsave("tst.pdf")被“解决”,但错误仍然存​​在。 我会向 R 团队报告。

我在 Windows(32 位)中遇到过 png、jpeg 和 pdf 扩展。 经过一番研究,我发现原因是我试图将它们直接保存在硬盘中:

 ggsave(paste("C:/how",eval(parse(text = "i")),eval(parse(text = "j")),".pdf",sep="_"),height=6.75,width=9)

似乎 RStudio 没有管理员权限直接写入 C:/。 我已将文件夹更改为桌面,现在一切正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM