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字符的支持更稳定,配合明确指定支持该符号的字体即可解决:
确保字体可被R调用
如果已安装Arial Unicode MS,用systemfonts注册字体(Windows下字体路径通常为C:/Windows/Fonts/ARIALUNI.TTF):systemfonts::register_font( "Arial Unicode MS", regular = "C:/Windows/Fonts/ARIALUNI.TTF" )绘制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"))用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
相关产品推荐
相关产品推荐

