ggplot生成PDF时Calibri字体不渲染,文本缺失问题求助
解决ggplot2使用Calibri字体编织PDF时的文本丢失与警告问题
问题根源
这类警告和文本丢失,本质是extrafont在Windows环境下处理TrueType字体(如Calibri)嵌入PDF时的兼容性问题,加上重复执行字体导入、未正确加载PDF字体映射导致的。
推荐解决方法:改用showtext包(更稳定的PDF字体支持)
showtext对跨设备字体渲染和PDF嵌入支持更友好,无需复杂的字体导入步骤,直接调用系统字体:
--- title: "Untitled" output: pdf_document date: '2023-03-09' ---
{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) library(ggplot2) library(showtext) # 注册系统中的Calibri字体 font_add("Calibri", regular = "calibri.ttf", bold = "calibrib.ttf") # 启用showtext渲染(对PDF生效) showtext_auto()
ggplot(mtcars, aes(wt, mpg)) + geom_point() + ggtitle("Example plot") + theme(text = element_text(family = "Calibri", size = 11))
若坚持使用extrafont的修正方案
仅执行一次字体导入:
font_import()无需每次编织都运行,首次运行后注释掉,或添加判断逻辑避免重复执行:# 仅当Calibri未导入时执行 if (!"Calibri" %in% extrafont::fonts()) { extrafont::font_import(pattern = "Calibri", prompt = FALSE) }加载PDF专用字体映射:在绘图前必须加载针对PDF的字体配置:
extrafont::loadfonts(device = "pdf")修正后的完整代码:
--- title: "Untitled" output: pdf_document date: '2023-03-09' ---{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) library(ggplot2) library(extrafont) # 按需导入字体 if (!"Calibri" %in% fonts()) { font_import(pattern = "Calibri", prompt = FALSE) } # 加载PDF字体 loadfonts(device = "pdf")ggplot(mtcars, aes(wt, mpg)) + geom_point() + ggtitle("Example plot") + theme(text = element_text(family = "Calibri", size = 11))
额外注意事项
- 确认系统中确实安装了Calibri字体,可通过
extrafont::fonts()或showtext::font_paths()查看可用字体 - 若仍有问题,检查字体名称是否完全匹配(比如部分系统中显示为
Calibri Regular而非Calibri)
内容的提问来源于stack exchange,提问作者Natalias
相关产品推荐
相关产品推荐

