ggplot 3.3.4使用ggsave导出wmf/emf提示unused argument (bg = "white")错误
报错原因与解决方案
报错产生原因
ggplot 3.3.0及后续版本对ggsave函数做了参数默认值调整,会默认向所有调用的图形导出设备传递bg = "white"参数,用于统一设置图片背景色。但Windows系统内置的grDevices::win.metafile()接口本身不支持bg参数,wmf/emf格式的背景色逻辑由系统元文件规范直接定义,不需要额外传参设置,因此ggsave多传递的bg参数会触发「未使用参数」的报错。
RStudio交互式导出功能没有调用ggsave的封装逻辑,是单独实现的元文件导出流程,不会传递多余的bg参数,因此导出无异常。
解决方案
- 方法1:调用
ggsave时手动指定bg = NULL,跳过背景色参数传递,示例代码如下:
# 导出wmf格式 ggsave("test.wmf", bg = NULL) # 导出emf格式 ggsave("test.emf", bg = NULL)
- 方法2:手动指定无额外参数的设备接口,避免
ggsave自动传递多余参数:
ggsave("test.wmf", device = function(filename) win.metafile(filename = filename))
- 方法3:沿用底层调用逻辑,封装为自定义导出函数使用,适合需要批量导出wmf/emf的场景:
save_emf <- function(plot, filename, width = 8.98, height = 5.98) { win.metafile(filename, width = width, height = height) print(plot) dev.off() } # 调用示例 p <- ggplot(mpg, aes(cty, hwy)) + geom_point() save_emf(p, "test.emf")
内容的提问来源于stack exchange,提问作者David Weis
相关产品推荐
相关产品推荐

