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

Matplotlib渲染数学公式无法切换为Fira Code字体及报错解决

解决Matplotlib渲染数学公式的字体切换与换行报错问题

问题分析

  1. 换行报错原因:mathtext.math_to_image会将输入文本中的换行符当作普通字符解析,而目标字体没有对应换行的字形,因此抛出Font 'default' does not have a glyph for '\n'错误。
  2. 字体切换失败原因:原代码中math_fontfamily='cm'强制数学公式使用Computer Modern字体,覆盖了自定义字体设置;同时未正确配置Matplotlib的数学文本渲染规则,无法加载Fira Code Nerd Font。

解决方案

方案一:修复math_to_image的换行与字体配置

直接修改原代码的文本格式与字体配置,确保换行被正确解析,同时加载Fira Code Nerd Font:

from matplotlib import mathtext, font_manager
import matplotlib as mpl

# 全局参数配置
mpl.rcParams['savefig.transparent'] = True
mpl.rcParams['text.color'] = "white"
# 开启自定义数学字体
mpl.rcParams['mathtext.fontset'] = 'custom'

# 替换为你的Fira Code Nerd Font本地路径
fira_font_path = "/path/to/FiraCodeNerdFont-Regular.ttf"
# 加载字体
fira_font = font_manager.FontProperties(fname=fira_font_path, size=30)

# 将数学文本的各类样式绑定到Fira Code
mpl.rcParams['mathtext.rm'] = fira_font.get_name()
mpl.rcParams['mathtext.it'] = fira_font.get_name()
mpl.rcParams['mathtext.bf'] = fira_font.get_name()

# 使用\\n转义换行,避免被当作普通字符
mathtext.math_to_image(
    r"""Sum of zeroes: $\alpha + \beta$\\nSome text""",
    "output.png",
    prop=fira_font,
    dpi=300,
    format='png'
)

方案二:改用Pyplot渲染(推荐)

mathtext.math_to_image功能有限,改用Pyplot的文本绘制功能可更灵活处理换行与字体:

import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib import font_manager

# 全局参数配置
mpl.rcParams['savefig.transparent'] = True
mpl.rcParams['text.color'] = "white"
mpl.rcParams['figure.facecolor'] = 'none'  # 确保背景透明

# 替换为你的Fira Code Nerd Font本地路径
fira_font_path = "/path/to/FiraCodeNerdFont-Regular.ttf"
fira_font = font_manager.FontProperties(fname=fira_font_path, size=30)

# 配置数学文本使用自定义字体
mpl.rcParams['mathtext.fontset'] = 'custom'
mpl.rcParams['mathtext.rm'] = fira_font.get_name()
mpl.rcParams['mathtext.it'] = fira_font.get_name()
mpl.rcParams['mathtext.bf'] = fira_font.get_name()

# 创建画布并隐藏坐标轴
fig, ax = plt.subplots(figsize=(5, 2))
ax.axis('off')

# 直接用\n换行,Pyplot会自动处理
ax.text(0.1, 0.5, r"""Sum of zeroes: $\alpha + \beta$
Some text""", fontproperties=fira_font, va='center')

# 保存图片,裁剪多余空白
plt.savefig("output.png", dpi=300, format='png', bbox_inches='tight', pad_inches=0.1)
plt.close()

注意事项

  • 确保Fira Code Nerd Font已正确安装,或通过fname参数指定正确的字体文件路径。
  • 若Fira Code Nerd Font缺少部分数学符号(如希腊字母),可搭配专门的数学字体,或启用mpl.rcParams['text.usetex'] = True(需系统安装TeX环境,并配置TeX使用Fira Code字体)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:09:21