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
相关产品推荐
相关产品推荐

