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

Posted

技术标签:

【中文标题】ggplot2 ggsave 函数导致图形设备不显示绘图【英文标题】:ggplot2 ggsave function causes graphics device to not display plots 【发布时间】:2013-05-04 14:06:16 【问题描述】:

我已经更新了我的 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 中。

【问题讨论】:

运行它确实会为我生成一个空的图形设备,但我没有遇到任何其他问题。随后的绘图显示在新打开的图形设备上就好了。 (我在 OS X 上。) 我也无法在 Windows XP 上复制。 我无法在 Windows 7 上复制 感谢您发布此信息。我遇到了同样的问题(在 Mac 上),并认为尝试让人们了解正在发生的事情会很痛苦。我发现我必须不时使用 dev.off() 来冲洗它。但正如答案中所建议的那样,单独执行这些行似乎也可以。 6 年后,我在使用 ggsavefunction 时遇到了同样的错误 Unknown graphics device。对我来说,我遇到了错误,因为我错过了 filename 参数中的图像扩展名 .png 。把这个贴在这里,以防有人觉得它有用。 【参考方案1】:

似乎是 RStudio 的一个问题。该问题描述为here 和here。

解决方法是安装 RStudio V0.97.311,或者确保分别执行 ggplot 和 ggsave 行(即不要选择并在一个块中同时使用 control+enter 运行)。

【讨论】:

以上是关于ggplot2 ggsave 函数导致图形设备不显示绘图的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化使用ggsave将可视化图像结果保存为SVG文件实战

ggsave()不会加粗文本,它会更改所有文本的字体而不仅仅是标题

ggsave 和 gganimate 的“动画”中符号的大小一致

R语言与医学统计图形-过渡函数qplot

用 ggplot2 注释 R 中的矩形以获得对数刻度的图形

ggplot2中的字体大小混乱