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

MacOS High Sierra下ggplot2导出PDF时轴标签短破折号显示异常

解决MacOS High Sierra下ggplot2导出PDF时en-dash显示为连字符的问题

这问题我之前在Mac上做可视化时也踩过坑——quartz里显示好好的en-dash,一导出PDF就变成普通连字符,本质是默认PDF导出后端对Unicode特殊字符的支持不够,而Quartz用的是Mac原生渲染,能正常调用系统字体的特殊字形。给你几个实用的解决办法:

方法1:改用Cairo PDF后端导出

默认的pdf()函数基于PostScript,对Unicode字符支持有限,换成cairo_pdf()就能解决大部分特殊字符显示问题,它对Unicode的兼容性更好:

# 先绘制你的图形
fit1 <- lm(y ~ x, data.df)
p1 <- ggplot(data.df, aes(x=x, y=y)) + 
  geom_point() + 
  geom_abline(intercept = coef(fit1)[[1]], slope = coef(fit1)[[2]], color="red", size=.2) + 
  xlab("CMP Left–Right Score") + 
  ylab("Disposition Towards BI")

# 用cairo_pdf导出
cairo_pdf("your_plot.pdf", width = 6, height = 4)  # 可自定义尺寸
print(p1)
dev.off()

方法2:明确指定支持en-dash的字体 + 使用Unicode转义符

有时候直接输入的en-dash可能因为编码问题在导出时丢失,换成Unicode转义符\u2013更稳妥,同时指定一个系统里存在且支持特殊字符的字体(比如Helvetica Neue、Arial):

p1 <- ggplot(data.df, aes(x=x, y=y)) + 
  geom_point() + 
  geom_abline(intercept = coef(fit1)[[1]], slope = coef(fit1)[[2]], color="red", size=.2) + 
  xlab("CMP Left\u2013Right Score") +  # 用Unicode转义符代替直接输入的en-dash
  ylab("Disposition Towards BI") +
  theme(text = element_text(family = "Helvetica Neue"))  # 指定支持特殊字符的字体

# 再用pdf()或cairo_pdf()导出都可以
pdf("your_plot.pdf")
print(p1)
dev.off()

方法3:用extrafont包导入系统字体到R

如果上面的方法还不行,可以用extrafont把Mac系统字体导入到R的PDF设备中,确保导出时能调用到正确的字体:

# 安装并加载extrafont包
install.packages("extrafont")
library(extrafont)

# 导入系统字体(第一次运行会比较久,耐心等)
font_import()

# 加载字体到PDF设备
loadfonts(device = "pdf")

# 绘图时指定字体
p1 <- ggplot(data.df, aes(x=x, y=y)) + 
  geom_point() + 
  geom_abline(intercept = coef(fit1)[[1]], slope = coef(fit1)[[2]], color="red", size=.2) + 
  xlab("CMP Left–Right Score") + 
  ylab("Disposition Towards BI") +
  theme(text = element_text(family = "Arial"))  # 选择你导入的字体

# 导出PDF
pdf("your_plot.pdf")
print(p1)
dev.off()

简单总结下:Quartz正常显示是因为它用Mac原生渲染,直接调用系统字体;而默认PDF导出用的PostScript字体集不全,所以会把en-dash替换成普通连字符。上面三种方法里,方法1最简单直接,优先试试~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:49:46