Matplotlib柱状图顶部数值显示为指数形式如何转为普通数字
Matplotlib横向柱状图柱顶标签科学计数法修改方案
问题现象
- 绘制横向柱状图时,已通过
ax.get_xaxis().get_major_formatter().set_scientific(False)关闭X轴刻度的科学计数法显示 - 调用
ax.bar_label()生成的柱顶数值标签仍以指数形式展示,需要改为普通纯数字格式
原实现代码:
fig, ax = plt.subplots() fig.set_size_inches(15,2.5) ax.barh(y = fig_1['member_casual'], width = fig_1['ride_id'], color = ['orange','lightcoral'], height = 0.8) ax.set_xlabel("No. of rides") ax.set_xlim(xmin = 0, xmax = 3500000) ax.set() ax.get_xaxis().get_major_formatter().set_scientific(False) for bars in ax.containers: ax.bar_label(bars) fig.tight_layout()
原因说明
坐标轴的科学计数法配置仅对轴刻度生效,不会自动应用到bar_label生成的柱体标签,标签的数字格式需要单独配置。
修复方法
在调用ax.bar_label()时传入fmt参数,明确指定数字格式化规则即可:
- 纯整数无分隔格式:使用
fmt='%d',适配骑行次数这类整数计数场景 - 带千位分隔符易读格式:使用
fmt='{:,.0f}',大数字展示更清晰
修改后的标签添加代码段:
for bars in ax.containers: # 按需选择对应fmt配置即可 ax.bar_label(bars, fmt='%d') # 千位分隔符版本替换为下面这行 # ax.bar_label(bars, fmt='{:,.0f}')
如果统计值存在小数,将fmt替换为对应小数位数的格式即可,比如保留2位小数用fmt='%.2f'。
另外原代码中空的ax.set()语句没有实际作用,可以直接删除。
内容的提问来源于stack exchange,提问作者Praful Kumar
相关产品推荐
相关产品推荐

