matplotlib绘制柱状图时数据被自动归一化,如何阻止该行为?
问题本质
你观察到的并非matplotlib对数据做了归一化处理,是当y轴数值量级较大时,matplotlib默认会使用科学计数法显示y轴刻度,同时将统一的偏移量标注在y轴顶部,视觉上会让人误以为数值被压缩到了0-1的区间。
修复方案
方案1:关闭y轴科学计数法(最简方案)
只需在绘制柱状图的代码后添加一行配置即可:ax1.ticklabel_format(axis='y', style='plain')
方案2:自定义y轴刻度格式(可选)
如果需要对刻度格式做更精细的调整(比如添加千位分隔符),可以使用matplotlib的刻度格式化工具:
from matplotlib.ticker import StrMethodFormatter # 示例:将y轴刻度设置为带千位分隔符的整数 ax1.yaxis.set_major_formatter(StrMethodFormatter('{x:,.0f}'))
优化后完整代码
同时修复了原代码中分组结果和刻度标签可能顺序不匹配的潜在问题:
obs_by_park = observations.groupby('park_name')['observations'].sum() fig = plt.figure(figsize=(11, 8.5)) ax1 = fig.add_subplot() ax1.bar(range(len(obs_by_park)), obs_by_park) ax1.set_xticks(range(len(obs_by_park))) # 直接使用分组后的索引作为标签,保证和柱子顺序一致 ax1.set_xticklabels(obs_by_park.index, rotation=15) # 关闭y轴科学计数法 ax1.ticklabel_format(axis='y', style='plain') plt.savefig('observations.png') plt.show()
内容的提问来源于stack exchange,提问作者theEngineeredSelf
相关产品推荐
相关产品推荐

