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

ggplot2特定字体无法保存至PDF问题求助

解决ggplot+grid.arrange保存PDF时的字体错误问题

我之前也遇到过一模一样的问题,Windows下用extrafont加载Calibri后,R里显示正常但存PDF就报字体宽度错误,其实是默认PDF设备对TrueType字体的支持不够,或者extrafont的字体映射没正确加载到PDF设备上。这里有几个亲测有效的解决方法:

方法1:重新导入并加载PDF设备的字体

有时候第一次安装extrafont后,字体没有完全导入到R的PDF设备映射里,重新跑一遍导入流程:

library(extrafont)
# 只导入Calibri,节省时间,也可以去掉pattern参数导入所有字体
font_import(pattern = "Calibri")
# 加载PDF设备的字体映射(之前你用的是win设备,要换成pdf)
loadfonts(device = "pdf")

完成后重启R会话,再尝试保存PDF。

方法2:使用cairo_pdf设备保存

默认的pdf()设备对某些Windows字体支持不佳,换成cairo_pdf()会好很多,它对TrueType字体的嵌入更友好:

library(gridExtra)
library(extrafont)

# 先确保字体已加载
loadfonts(device = "pdf")

# 用cairo_pdf生成PDF
cairo_pdf(file = "Fig.4.trw.pdf", height = 14, width = 14, family = "Calibri")
grid.arrange(p1, p2, p3, p4)
dev.off()

方法3:用ggsave配合cairo设备

如果想用ggsave,要把组合后的图对象传进去,并且指定cairo_pdf设备:

Fig.4.trw <- grid.arrange(p1, p2, p3, p4)
ggsave(
  filename = "Fig.4.trw.pdf",
  plot = Fig.4.trw,
  height = 14,
  width = 14,
  device = cairo_pdf,
  family = "Calibri"
)

额外注意点

  • 确认字体名称正确:用fonts()命令查看extrafont里的字体列表,确保你用的family="Calibri"和列表里的名称完全一致(有时候会有"Calibri Bold"这种变体,别写错)。
  • Windows用户可能需要以管理员身份运行R,才能成功导入系统字体。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:58:05