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

Matplotlib设置x轴刻度格式化时新标签叠加未替换旧刻度问题

问题原因

x轴刻度标签叠加的核心原因是:设置PercentFormatter前,对应轴已经被绑定了固定文本类型的刻度标签。
旧版scikit-learn的plot_learning_curve、geopandas等基于Matplotlib封装的绘图接口,内部会调用set_xticklabels()或带labels参数的set_xticks()手动写入刻度文本,此时Matplotlib会默认使用FixedFormatter渲染标签,不会自动响应后续新设置的格式化器,最终出现新旧标签叠层显示的现象。

修复方法

在设置百分比格式化器前,先清除轴上已绑定的固定刻度标签,让轴回到自动根据formatter渲染标签的状态即可。将原代码中设置formatter的部分修改为:

axes[0].legend(loc="best")

# 重置x轴刻度,清除原有固定标签绑定
axes[0].set_xticks(axes[0].get_xticks())
# 设置百分比格式化器:若train_sizes为0-1范围的占比值,xmax需设为1,否则百分比数值计算错误
axes[0].xaxis.set_major_formatter(PercentFormatter(xmax=1))

如果上述写法在部分第三方库绘图场景下不生效,可以使用更彻底的重置逻辑:

from matplotlib.ticker import AutoLocator
# 重置x轴主刻度为自动定位模式,彻底清除原有固定刻度配置
axes[0].xaxis.set_major_locator(AutoLocator())
axes[0].xaxis.set_major_formatter(PercentFormatter(xmax=1))
注意事项
  • 所有轴样式、刻度格式化相关的代码,必须放在第三方封装绘图函数调用完成之后执行,避免绘图函数内部逻辑覆盖配置,或提前写入固定标签导致叠加。
  • 原代码中PercentFormatter(xmax=5)参数设置错误:xmax代表x轴上对应100%位置的数值,当前代码里train_sizes是np.linspace(0.1,1.0,5)生成的0.11范围的占比值,因此`xmax`应传入1,才能正确显示10%100%的训练集占比标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:45:33