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

ggplot2中同一坐标轴标题内混合使用Arial与Symbol字体的实现方法

ggplot2中同一坐标轴标题内混合使用Arial与Symbol字体的实现方法

嗨,我完全get到你的需求啦——按照Nature的绘图规范,坐标轴标题里普通文字用Arial/Helvetica,希腊字母得用Symbol字体,还不想拆成两个文本元素手动拼接对吧?这其实可以通过ggplot支持的plotmath表达式来实现,不用额外加元素,一次搞定!

核心思路是:在坐标轴标题的表达式里,给需要用Symbol字体的部分(也就是这里的μ)单独指定字体家族,其他文本保持Arial即可。下面是修改后的完整代码,我标出来了关键改动的地方:

ggplot(aes(
  x = fct_inorder(Dose),
  y = fct_rev(fct_inorder(Tissue_type)),
  fill = viability,
)) +
  geom_tile(color = "black") +
  # 关键改动1:用plotmath表达式指定混合字体
  xlab(label = expression(Dose~of~AC484~(fontfamily("Symbol")*mu*M))) +
  ylab(label = "") +
  theme_void() +
  theme(
    axis.text.x = element_text(
      size = 3.59, angle = 45, hjust = 1.0, margin = margin(t = -11, b = 0),
      family = "Arial", color = "#000000", vjust = 0.75
    ),
    axis.title.x = element_text(
      size = 3.59, 
      # 关键改动2:基础字体设为Arial,表达式中指定的部分会覆盖这个设置
      family = "Arial", color = "black", vjust = -3.5,
      margin = margin(t = 2, b = 5)
    )
  )

给你解释一下代码里的细节:

  • expression():让ggplot解析里面的plotmath语法,支持局部字体指定
  • ~:在plotmath里代表空格,用来分隔单词
  • fontfamily("Symbol")*mu:指定μ这个希腊字母用Symbol字体,*用来连接字符,确保字体设置只作用于后面的μ
  • 轴标题的基础字体设为Arial,这样除了指定Symbol的部分,其他文字都会用Arial显示

另外要注意,如果你的系统里Symbol字体的名称不是"Symbol"(比如部分Mac或Linux系统可能叫"SymbolMT"),可以用extrafont::fonts()命令查看已加载的字体列表,找到对应的名称替换进去就行。如果还没加载字体,记得先运行extrafont::loadfonts()哦。

备注:内容来源于stack exchange,提问作者Madeline

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 11:24:35