为什么ggsave()输出字体与RStudio预览器中指定的字体不一致?
问题原因与解决方法
根本原因
新版RStudio调整了内置图形设备的默认配置,而ggsave()默认调用的导出设备和RStudio预览用的RStudioGD设备字体匹配逻辑不一致:
- RStudio预览设备会优先读取
extrafont预加载的字体配置,所以能正确识别你指定的常规版Myriad Pro - 导出PNG时
ggsave()默认调用系统原生png()设备,新版RStudio环境下该设备的字体模糊匹配优先级改变,会优先匹配到同家族的压缩/窄体变体,导致导出字体异常
解决方法
- 方案1:使用ragg包导出(最推荐)
ragg包的字体匹配逻辑统一,不受系统设备配置影响,可解决绝大多数字体识别异常问题:
# 首次使用先安装依赖 install.packages("ragg") # 导出时指定ragg作为渲染设备 ggsave("test_output.png", device = ragg::agg_png, dpi = 300, width = 8, height = 5)
- 方案2:指定精确的字体注册名
避免系统模糊匹配到变体,先运行extrafont::fonts()查看Myriad Pro常规版的完整注册名,通常为Myriad Pro Regular,修改主题配置即可:
theme(text = element_text(family = "Myriad Pro Regular")) # 导出时指定cairo渲染,保证字体生效 ggsave("test_output.png", type = "cairo")
- 方案3:刷新extrafont字体映射缓存
如果是升级RStudio后字体缓存失效导致的问题,重新生成字体索引即可:
# 重新扫描系统字体更新映射表 extrafont::font_import(prompt = FALSE) # 重载字体配置 extrafont::loadfonts(device = "win", quiet = TRUE)
内容的提问来源于stack exchange,提问作者PupHendo
相关产品推荐
相关产品推荐

