R 导出 PDF 时中文不显示,99% 是因为:
- PDF 设备默认用 Helvetica 等西文字体;
- 这些字体没有中文字形,于是变成空白或方框;
- 你虽然指定了"宋体/微软雅黑",但 R 找不到对应字体文件,或者名字写错。
下面给出Windows 7/10 通用 、不依赖 showtext 的最简方案(用 extrafont 把系统 TTF 真正灌进 PDF 内核)。
1. 一次性准备字体(仅需第一次)
r
install.packages("extrafont") # 如已装可跳过
library(extrafont)
font_import() # 把系统所有 TTF 注册到 R
loadfonts(device = "pdf") # 生成字体映射表
这一步会拷几百 MB,耗时 2-3 分钟,以后永远不用再跑。
2. 查看可用中文名
r
fonts() # 列出已注册字体
## 找到 "SimSun", "MicrosoftYaHei", "STKaiti" 等
3. 画图时显式指定字体
r
library(ggplot2)
library(extrafont)
p <- ggplot(mtcars, aes(wt, mpg)) +
geom_point() +
labs(title = "汽车重量与油耗关系",
x = "重量(千磅)", y = "每加仑英里数") +
theme(text = element_text(family = "SimSun")) # 关键行
ggsave("my_plot.pdf", p, width = 6, height = 4, device = cairo_pdf)
- family = "SimSun" 必须和
fonts()
里完全一致(大小写敏感)。 cairo_pdf
比默认pdf()
对 TTF 更宽容;Win7 需保证 R ≥ 4.0 且已装 Rtools。
4. 检查 PDF
用 Adobe Reader / SumatraPDF 打开,中文应正常显示;
若仍方框,99% 是字体名写错或注册表没刷新,重启 R 再跑 loadfonts()
即可。
一句话
PDF 不显示中文 = 字体没灌进去 ;
一次 extrafont::font_import()
+ 画图 family = "SimSun"
+ cairo_pdf
即可永绝后患。