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

如何为整个ggplot图表设置默认字体?

在ggplot中全局设置等宽字体的解决方案

问题说明

想要给ggplot图表的所有文本指定等宽字体(比如Courier或首选的Roboto Mono),已知可通过主题设置base_size,但找不到全局配置等宽字体的可行示例。尝试使用extrafont包实现,但代码未生效:

install.packages("extrafont")
library(extrafont)
loadfonts(device = "win")

require(tidyverse)

ggplot(mtcars, aes(x = mpg, y = cyl, group = carb)) +
  geom_point() +
  theme_light(base_size = 15, base_family = "Roboto Mono")

解决步骤

1. 确保字体被R正确识别

  • 先确认系统已安装Roboto Mono字体(未安装的话,先从官方字体源下载安装)。
  • 用extrafont导入系统字体到R环境,首次运行耗时较长:
    library(extrafont)
    font_import() # 仅需首次运行,导入所有系统字体
    loadfonts(device = "win") # Windows系统用此参数,Mac/Linux可设为"pdf"或省略
    
  • 执行fonts()命令,检查输出列表中是否存在"Roboto Mono",确认字体已被识别。

2. 全局设置字体的两种有效方法

方法一:直接在主题中指定(修正原有代码)

字体识别正常后,严格按照fonts()输出的名称设置base_family,同时可额外通过theme(text = ...)确保所有文本元素统一:

library(tidyverse)
library(extrafont)
loadfonts(device = "win")

ggplot(mtcars, aes(x = mpg, y = cyl, group = carb)) +
  geom_point() +
  theme_light(base_size = 15, base_family = "Roboto Mono") +
  theme(text = element_text(family = "Roboto Mono"))

方法二:设置全局主题,避免重复配置

如果需要所有ggplot图表默认使用该字体,可提前设置全局主题:

library(tidyverse)
library(extrafont)
loadfonts(device = "win")

# 配置全局默认主题
theme_set(theme_light(base_size = 15, base_family = "Roboto Mono"))

# 后续绘制的所有图表自动应用该字体
ggplot(mtcars, aes(x = mpg, y = cyl, group = carb)) +
  geom_point()

3. 跨平台替代方案:使用showtext包

若extrafont配置麻烦,可尝试showtext,它支持直接从Google Fonts加载字体,跨平台兼容性更好:

install.packages("showtext")
library(showtext)

# 直接加载Google Fonts中的Roboto Mono
font_add_google("Roboto Mono", "Roboto Mono")
showtext_auto() # 让ggplot自动使用showtext管理的字体

ggplot(mtcars, aes(x = mpg, y = cyl, group = carb)) +
  geom_point() +
  theme_light(base_size = 15, base_family = "Roboto Mono")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:20:25