我正在保存一个刻面的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)
答案 0 :(得分:11)
注意:在Windows 7 64位上使用R 2.12.1,这个问题已经消失了。如果您遇到此问题,请先尝试更新您的R版本。
在另一个问题再次出现问题之后,我在我的新系统上重新测试了我的测试代码,看看这个错误是否已经消失,而且确实存在。
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:/。我已将文件夹更改为“桌面”,现在一切正常。