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

R中ggplot用CairoPDF保存PDF时Unicode符号无法显示的问题

解决ggplot中Unicode符号(\u2699)保存PDF显示异常的问题

问题情况

在R中使用ggplot绘制包含Unicode符号\u2699(齿轮符号)时,RStudio的agg后端和PNG格式保存都能正常显示,但尝试多种PDF保存方式(包括CairoPDF、默认pdf设备)均只显示占位符。已安装Arial Unicode MS字体,尝试过{emojifont}、geom_richtext均无效。

解决方案

核心问题是PDF设备未正确加载包含目标Unicode符号的字体,以下是两种验证有效的解决方法:


方法1:使用ragg::agg_pdf设备(推荐)

ragg对Unicode字符的支持更稳定,配合明确指定支持该符号的字体即可解决:

  1. 确保字体可被R调用
    如果已安装Arial Unicode MS,用systemfonts注册字体(Windows下字体路径通常为C:/Windows/Fonts/ARIALUNI.TTF):

    systemfonts::register_font(
      "Arial Unicode MS",
      regular = "C:/Windows/Fonts/ARIALUNI.TTF"
    )
    
  2. 绘制ggplot时指定字体
    在geom_text和全局主题中明确使用该字体:

    library(ggplot2)
    
    # 示例绘图
    test <- ggplot(data.frame(x = 1, y = 1), aes(x, y)) +
      geom_text(label = "\u2699", family = "Arial Unicode MS", size = 10) +
      theme(text = element_text(family = "Arial Unicode MS"))
    
  3. 用ragg保存PDF

    ggsave(test, file = "test_unicode.pdf", device = ragg::agg_pdf)
    

方法2:使用CairoPDF并指定字体

如果偏好Cairo设备,需在保存时直接指定字体:

# 直接调用CairoPDF设备并指定字体
Cairo::CairoPDF("test_cairo.pdf", family = "Arial Unicode MS")
print(test)
dev.off()

关键说明

  • 之前的失败原因是默认PDF设备未关联到包含\u2699的字体,即使安装了Arial Unicode MS,ggplot和PDF设备也不会自动调用。
  • 避免依赖extrafont的loadfonts(部分Windows环境下会有字体缓存问题),优先使用systemfonts注册字体。

内容的提问来源于stack exchange,提问作者Moritz Schwarz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:34:51