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

Matplotlib设置axes.unicode_minus=False仍报U+2212减号缺失警告如何解决?

问题根因

你设置matplotlib.rcParams['axes.unicode_minus'] = False未生效,是因为仅对已生成的x轴刻度标签单独配置了自定义字体,matplotlib自动生成symlog坐标轴负刻度时,仍会调用全局默认字体检查U+2212(Unicode减号)的字符支持,因此触发警告。

可行解决方案
  • 方案1:全局配置自定义字体(推荐,一次配置全图生效)
    将你的自定义字体注册到matplotlib并配置为全局默认字体,配合关闭Unicode减号的参数即可完全解决问题,不需要再单独循环修改刻度标签字体:
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.font_manager
%matplotlib inline

# 字体配置
path = 'bahnschrift_reg.ttf'
# 注册自定义字体
matplotlib.font_manager.fontManager.addfont(path)
# 全局设置默认字体为Bahnschrift
mpl.rcParams['font.family'] = 'Bahnschrift'
# 关闭Unicode减号,使用ASCII减号
mpl.rcParams['axes.unicode_minus'] = False

# 绘图代码
f, ax = plt.subplots(1,1)
ax.set_xscale('symlog', linthresh=0.001)
ax.set_xlim(-0.0001, 100) 
ax.set_ylim(0, 1.02)

plt.show()
  • 方案2:仅修改x轴刻度字体的适配方案
    如果不需要全图使用该自定义字体,仅要x轴刻度使用,可以在修改标签字体前手动替换所有Unicode减号为ASCII减号:
# 原有绘图逻辑不变,替换设置刻度的部分代码
for label in ax.get_xticklabels():
    # 替换Unicode减号为ASCII减号
    raw_text = label.get_text()
    processed_text = raw_text.replace('\N{MINUS SIGN}', '-')
    label.set_text(processed_text)
    label.set_fontproperties(prop)
# 若后续添加了带负号的y轴刻度、图例、标题等内容,也需要对应做替换处理
  • 方案3:临时屏蔽警告(仅适合临时测试用,不推荐正式场景使用)
    如果不需要修改渲染逻辑,也可以直接过滤对应类别的警告,不会影响正常绘图:
import warnings
warnings.filterwarnings("ignore", message="Font 'default' does not have a glyph for.*U\\+2212")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:27:00