如何使用cowplot创建图形时禁用空白窗口弹出?
解决cowplot plot_grid弹出空白窗口的问题
先来看下你运行的代码:
require(cowplot) plot.mpg <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) + geom_point(size=2.5) plot.diamonds <- ggplot(diamonds, aes(clarity, fill = cut)) + geom_bar()+theme(axis.text.x = element_text(angle=70, vjust=0.5)) testing <- plot_grid(plot.mpg, plot.diamonds, labels = c('A', 'B'))
结合你的R版本(3.4.4)和Linux平台,这里有几个能从根源上解决空白窗口弹出问题的办法:
方法一:修改plot_grid的绘制触发参数
plot_grid默认会立即绘制图形(draw = TRUE),这就是弹窗的原因。只需要在调用时加上draw = FALSE,就只会生成图形对象而不会自动打开窗口:testing <- plot_grid(plot.mpg, plot.diamonds, labels = c('A', 'B'), draw = FALSE)之后如果需要查看图形,手动调用
print(testing)即可。方法二:指定非交互式图形设备
如果你的场景是在脚本中批量运行、不需要任何图形窗口,可以在代码开头设置使用空设备:# 禁用交互式图形设备 options(device = "null") require(cowplot) # 后续绘图代码不变 plot.mpg <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) + geom_point(size=2.5) plot.diamonds <- ggplot(diamonds, aes(clarity, fill = cut)) + geom_bar()+theme(axis.text.x = element_text(angle=70, vjust=0.5)) testing <- plot_grid(plot.mpg, plot.diamonds, labels = c('A', 'B'))这样所有绘图操作都不会弹出窗口,图形对象依然可以用
ggsave("output.pdf", testing)保存到文件。方法三:临时关闭窗口(事后处理)
如果只是临时需要处理已弹出的窗口,可以在代码末尾加上关闭命令:require(cowplot) plot.mpg <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) + geom_point(size=2.5) plot.diamonds <- ggplot(diamonds, aes(clarity, fill = cut)) + geom_bar()+theme(axis.text.x = element_text(angle=70, vjust=0.5)) testing <- plot_grid(plot.mpg, plot.diamonds, labels = c('A', 'B')) dev.off() # 关闭弹出的空白窗口不过这个方法是事后补救,不如前两种从根源上避免弹窗。
另外提一句,你的R版本比较老旧(2018年发布的3.4.4),如果后续有机会升级到较新的R和cowplot版本,这类默认行为可能已经优化,出现类似问题的概率会更低。
内容的提问来源于stack exchange,提问作者user2338823
相关产品推荐
相关产品推荐

