Base R绘图中使用跨性别/雌雄同体符号遇macOS字体问题
在Base R绘图中解决macOS罕见Unicode符号显示方块的问题
macOS上Base R绘图时,常见的男女Unicode符号(♂\u2642、♀\u2640)能正常显示,但像雌雄同体/跨性别符号⚥(\u26a5)这类罕见字符会显示方块,核心原因是默认绘图设备用的字体不包含这些字符——虽然R控制台能输出符号,是因为控制台用的字体支持,但绘图设备(比如quartz)的默认字体没覆盖这类符号。
下面是几种可行的解决办法:
1. 给绘图指定支持该符号的字体
先找到macOS上支持⚥的字体,比如Arial Unicode MS、Noto Sans Symbols这类覆盖全Unicode的字体,然后在绘图前用par(family)指定:
# 指定支持符号的字体 par(family = "Arial Unicode MS") a <- '\u26a5' plot(1, 1, pch = a, cex = 2) # cex参数放大符号,方便查看
如果不确定哪些字体支持,可以用extrafont包导入并列出系统字体,逐个测试:
library(extrafont) font_import() # 首次运行要导入系统字体,耗时较长 fonts() # 列出所有可用字体
2. 换用SVG/PNG绘图设备并指定字体
如果默认的quartz设备不好使,直接用SVG或PNG设备输出,在设备参数里指定支持的字体:
SVG格式示例
svg("trans_symbol.svg", family = "Arial Unicode MS") plot(1, 1, pch = '\u26a5', cex = 2) dev.off()
生成的SVG文件打开后就能看到正常显示的符号。
PNG格式示例
png("trans_symbol.png", family = "Arial Unicode MS") plot(1, 1, pch = '\u26a5', cex = 2) dev.off()
3. 用对应emoji替代(可选)
如果只是需要相似的视觉标识,也可以用跨性别emoji的Unicode(\u1F6C4),记得指定支持emoji的字体比如Apple Color Emoji:
par(family = "Apple Color Emoji") plot(1, 1, pch = '\u1F6C4', cex = 2)
内容的提问来源于stack exchange,提问作者Ho-Yon
相关产品推荐
相关产品推荐

