You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:47:05