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

如何修复matplotlib y轴科学计数法显示及ticklabel_format调用报错

问题原因分析

1. 调用ticklabel_format报错的原因

ticklabel_format()方法默认会同时对x、y两个坐标轴生效,但你的x轴是字符串类型的分类标签,使用的是StrCategoryFormatter格式器,该格式器不支持科学计数法相关的配置,只有数值类型轴使用的ScalarFormatter才支持该方法,所以触发了AttributeError。

2. y轴出现科学计数法的原因

matplotlib默认会在单轴数值最大值超过1e6、或者数值跨度过大时,自动启用科学计数法简化刻度显示,你的y轴最大值为1255531刚好超过阈值,所以触发了该规则。

修复方案

最简单的修复方式是调用ticklabel_format()时指定仅对y轴生效,避免触及x轴的分类格式器:
把原来的plt.gca().ticklabel_format(style='plain')替换为:

plt.gca().ticklabel_format(style='plain', axis='y')

如果需要更灵活的刻度配置,也可以手动设置y轴的格式器:

from matplotlib.ticker import ScalarFormatter
ax = plt.gca()
ax.yaxis.set_major_formatter(ScalarFormatter(useMathText=False))
ax.ticklabel_format(style='plain', axis='y')
修改后可正常运行的完整代码
import matplotlib.pyplot as plt
choice = "播放量" # 替换为你自己的choice变量定义
plt.title(f'TOP 10 videos by {choice}')
plt.xlabel('TOP places')
plt.ylabel(f'Number')

labels_top = ['Top10', 'Top9', 'Top8', 'Top7', 'Top6', 'Top5', 'Top4', 'Top3', 'Top2', 'Top1']
y_count = [50235, 90312, 150123, 250000, 290134, 370241, 385153, 768512, 955025, 1255531]

for graph in range(len(y_count[:10])):
    plt.bar(labels_top.pop(), y_count.pop())
    
# 仅指定y轴关闭科学计数法,不会触发x轴格式器报错
plt.gca().ticklabel_format(style='plain', axis='y')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:18:03