ggplot2 ggsave函数导致图形设备无法显示绘图

7
我已经更新了我的ggplot2库,现在遇到一个问题:在调用ggsave之后,图形设备不再显示图表。我无法解决这个问题,意味着我无法按需要导出图表。请帮忙。
在网上搜索发现一些dpi不匹配的问题,但设置或更改dpi似乎没有效果。这个问题似乎是在更新ggplot2库之后出现的。
以下代码可以重现该问题:
library(ggplot2);
df <- read.table(textConnection('value,value1 
 1,1 
 2,2
 3,3 '),header=TRUE,sep=',');

ggplot(df,aes(x=value,y=value1)) +   geom_point();

setwd('c:/temp'); 
ggsave('test.png');

运行后,输出为空,图形设备不再显示绘图。任何后续的绘图都不会在图形设备上显示。

运行dev.off()后,新的绘图可以正常显示,直到再次调用ggsave。

sessionInfo()报告R和库的版本如下:

R version 3.0.0 (2013-04-03)
Platform: i386-w64-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_New Zealand.1252  LC_CTYPE=English_New Zealand.1252   
[3] LC_MONETARY=English_New Zealand.1252 LC_NUMERIC=C                        
[5] LC_TIME=English_New Zealand.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] plyr_1.8        ggplot2_0.9.3.1 RODBC_1.3-6    

loaded via a namespace (and not attached):
 [1] colorspace_1.2-2   dichromat_2.0-0    digest_0.6.3       grid_3.0.0         gtable_0.1.2      
 [6] labeling_0.1       MASS_7.3-26        munsell_0.4        proto_0.3-10       RColorBrewer_1.0-5
[11] reshape2_1.2.2     scales_0.2.3       stringr_0.6.2      tools_3.0.0   

这个问题也出现在R的2.15.0和2.15.3版本中。

编辑:更改代码以使用sep = ','而不是空格加载数据

添加:进一步测试发现,这实际上可能是RStudio的一个错误,与ggsave后它如何显示图形设备有关,而不是R本身。在RGui中运行上述脚本不会重现该问题,只有在RStudio V0.97.336 + V0.97.449中才会出现。


1
运行这个程序确实会为我生成一个空的图形设备,但我没有遇到任何其他问题。随后的绘图在新打开的图形设备上显示得很好。(我使用的是OS X操作系统。) - joran
1
我在 Windows XP 上也无法复制。 - mnel
1
我在Windows 7上无法复制。 - Dason
1
谢谢您发布这篇文章。我也遇到了同样的问题(在Mac上),并且认为让人们理解发生了什么将是一个痛苦的过程。我发现我不时需要使用dev.off()来清除它。但是如答案所建议的,逐行执行似乎也可以解决问题。 - nzcoops
2
6年后,我在使用ggsave函数时遇到了相同的错误“未知图形设备”。对我来说,我之所以出现这个错误,只是因为我在filename参数中错过了图像扩展名“.png”。在这里发布这篇文章,以防有人发现它有用。 - mukund
显示剩余2条评论
1个回答

5
似乎存在一个RStudio的问题。该问题已经在这里描述以及这里
解决方法是安装RStudio V0.97.311,或确保您单独执行ggplot和ggsave命令(即不要一起选择并使用控制+enter键)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接