更大尺寸的ggsave png错误

时间:2010-11-24 18:44:13

标签: r ggplot2

我正在保存一个刻面的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)

2 个答案:

答案 0 :(得分:11)

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

在另一个问题再次出现问题之后,我在我的新系统上重新测试了我的测试代码,看看这个错误是否已经消失,而且确实存在。


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

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

但如果不能接受,你真的必须有一个疯狂的情节。据我所知,问题与显卡有关(源自this message from prof. 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团队报告。

答案 1 :(得分:0)

在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:/。我已将文件夹更改为“桌面”,现在一切正常。