Mac系统下ggplot无法调用Calibri字体的技术求助
在Mac系统中为ggplot配置Calibri字体的解决方案
问题背景
Mac系统下需在ggplot图表中使用Calibri字体,但尝试extrafont和showtext均失败:
- 使用
extrafont执行以下代码:
font_import(prompt = FALSE, pattern = "calibri")
返回错误:
Scanning ttf files in /Library/Fonts/, /System/Library/Fonts, /System/Library/Fonts/Supplemental, ~/Library/Fonts/ ... Extracting .afm files from .ttf files... Error in data.frame(fontfile = ttfiles, FontName = "", stringsAsFactors = FALSE) : arguments imply differing number of rows: 0, 1
- 使用
showtext执行以下代码:
list_of_fonts <- as.data.frame(font_files()) grep(pattern = "Calibri", x = list_of_fonts$family, ignore.case = TRUE, value = TRUE)
返回结果:
character(0)
- 直接在ggplot中调用字体时:
theme_set(theme_minimal( base_family="Calibri" ))
报错:
In grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : no font could be found for family "Calibri"
注:Calibri字体可在Word中正常使用。
解决方案
方法1:手动指定字体文件路径(showtext适配方案)
Mac上Calibri字体通常存放在/Library/Fonts/或~/Library/Fonts/目录下,直接通过showtext加载具体字体文件:
library(showtext) library(ggplot2) # 加载不同字重的Calibri字体 font_add("Calibri", regular = "/Library/Fonts/Calibri.ttf", bold = "/Library/Fonts/Calibri Bold.ttf", italic = "/Library/Fonts/Calibri Italic.ttf", bolditalic = "/Library/Fonts/Calibri Bold Italic.ttf") # 启用showtext渲染 showtext_auto() # 测试图表 ggplot(mtcars, aes(wt, mpg)) + geom_point() + labs(title = "Calibri字体测试", x = "车辆重量", y = "百公里油耗") + theme_minimal(base_family = "Calibri")
方法2:修复extrafont的字体扫描问题
extrafont报错是因为未匹配到目标字体文件,可手动指定路径导入:
library(extrafont) # 手动指定Calibri字体文件路径 calibri_file <- "/Library/Fonts/Calibri.ttf" # 导入单个字体 font_import(paths = dirname(calibri_file), pattern = basename(calibri_file), prompt = FALSE) # 根据导出设备加载字体库 loadfonts(device = "pdf") # 导出PDF时用 loadfonts(device = "screen")# 屏幕显示时用 # 测试图表 ggplot(mtcars, aes(wt, mpg)) + geom_point() + labs(title = "Calibri字体测试") + theme_minimal(base_family = "Calibri")
方法3:使用systemfonts包替代(现代方案)
systemfonts是适配Mac系统的现代字体处理包,无需复杂导入步骤:
library(systemfonts) library(ggplot2) # 确认Calibri是否能被系统识别 systemfonts::match_font("Calibri") # 设置全局ggplot字体 theme_set(theme_minimal(base_family = "Calibri")) # 测试图表 ggplot(mtcars, aes(wt, mpg)) + geom_point() + labs(title = "Calibri字体测试")
关键注意事项
- 若不确定字体路径,可打开「字体册」找到Calibri,右键选择「在访达中显示」获取准确路径。
- 导出PDF/PNG时,需确保对应字体加载函数已执行(如
showtext_auto()或loadfonts())。
内容的提问来源于stack exchange,提问作者m45ha
相关产品推荐
相关产品推荐

