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

R语言ggplot2中是否支持为不同语言分别设置对应显示字体

实现混合字体渲染的两种可行方案

你可以通过以下两种常用方案实现同一张图表中英文、数字用Roboto,中文字符用Long Cang的需求:

方案1:基于showtext字体回退机制(零手动标注,全局自动适配)

showtext依赖的sysfonts包从0.8版本开始支持字体回退配置,你可以自定义一个混合字体家族,系统会自动识别字符类型匹配对应字体:

library(showtext)
library(ggplot2)

# 开启自动渲染
showtext_auto()

# 加载所需Google字体
font_add_google('Roboto')
font_add_google('Long Cang')

# 定义混合字体:拉丁字符默认用Roboto,未匹配到的字符(中文)回退到Long Cang
font_add(
  family = "mixed_font",
  regular = "Roboto",
  fallback = "Long Cang"
)

# 绘图时直接指定base_family为自定义的混合字体即可
ggplot(mtcars, aes(mpg, wt)) +
  geom_point() +
  labs(
    title = 'This is the main title 中文标题',
    x = "英里/加仑 MPG",
    y = "重量 吨"
  ) +  
  theme_classic(base_family = 'mixed_font')

该方案无需手动修改每个文本内容,所有图表文本(标题、坐标轴、图例、注释等)都会自动适配字体:数字、英文字符使用Roboto,中文字符使用Long Cang。

方案2:基于ggtext的Markdown渲染(灵活控制局部样式)

如果需要更精细的字体控制(比如不同位置的中英文搭配不同字号、颜色),可以使用ggtext包手动标注不同文本的样式:

library(showtext)
library(ggplot2)
library(ggtext)

showtext_auto()
font_add_google('Roboto')
font_add_google('Long Cang')

ggplot(mtcars, aes(mpg, wt)) +
  geom_point() +
  labs(
    title = '<span style="font-family: Roboto;">This is the main title</span> <span style="font-family: Long Cang;">中文标题</span>',
    x = '<span style="font-family: Roboto;">mpg</span> <span style="font-family: Long Cang;">(英里每加仑)</span>'
  ) +  
  theme_classic() +
  theme(
    # 开启对应元素的markdown解析
    plot.title = element_markdown(),
    axis.title.x = element_markdown()
  )

注意事项

  • 首次运行代码需要保持网络连通,才能成功下载Google字体到本地缓存,后续运行无需重复下载
  • 导出图片时建议使用ragg设备,添加参数device = ragg::agg_png()即可保证字体渲染正确
  • RStudio用户可在「全局选项-常规-图形」中将后端设备改为AGG,避免预览时字体显示异常

你之前测试的两种全局字体效果对比如下:
两种字体全局设置的效果对比

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:45:05