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

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的修正方案

  1. 仅执行一次字体导入:font_import()无需每次编织都运行,首次运行后注释掉,或添加判断逻辑避免重复执行:

    # 仅当Calibri未导入时执行
    if (!"Calibri" %in% extrafont::fonts()) {
      extrafont::font_import(pattern = "Calibri", prompt = FALSE)
    }
    
  2. 加载PDF专用字体映射:在绘图前必须加载针对PDF的字体配置:

    extrafont::loadfonts(device = "pdf")
    
  3. 修正后的完整代码:

    ---
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 16:38:30