Matplotlib渲染数学公式无法切换为Fira Code字体及报错解决
解决Matplotlib渲染数学公式的字体切换与换行报错问题
问题分析
- 换行报错原因:
mathtext.math_to_image会将输入文本中的换行符当作普通字符解析,而目标字体没有对应换行的字形,因此抛出Font 'default' does not have a glyph for '\n'错误。 - 字体切换失败原因:原代码中
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
相关产品推荐
相关产品推荐

