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

如何自定义Pandas柱状图标注 隐藏不需要显示的0值标签

移除柱状图0.0标签的解决方法

你执行df = df.replace(0, "")报错的原因是:该操作会把DataFrame中的数值型0替换为字符串,破坏原有数值结构,绘图时坐标计算异常触发list index out of range报错,无需修改原始数据集,只需要调整标签生成逻辑即可。

完整可运行代码

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

data = [6.92, 1.78, 0.0, 0.0, 3.5, 8.82, 3.06, 0.0, 0.0, 5.54, -10.8, -6.03, 0.0, 0.0, -6.8, 13.69, 8.61, 9.98, 0.0, 9.42, 4.91, 3.54, 2.62, 5.65, 1.95, 8.91, 11.46, 5.31, 6.93, 6.42]

df = pd.DataFrame(np.array(data).reshape(6,5), columns=['Bank1', 'Bank2', 'Bank3', 'Bank4', 'Bank5'], index =['2016', '2017', '2018', '2019', '2020', '2021'])

ax = df.plot(kind='bar', rot=0, xlabel='Year', ylabel='Total Return %', title='Overall Performance', figsize=(15, 10))

# 替换原来的5行bar_label代码,自定义标签显示规则
for container in ax.containers:
    # 仅当柱子高度不为0时显示标签,否则为空
    labels = [f'{val:.1f}' if val != 0 else '' for val in container.datavalues]
    ax.bar_label(container, labels=labels, fontsize=8, padding=3)

ax.legend(title='Columns', bbox_to_anchor=(1, 1.02), loc='upper left')
plt.show()

代码修改说明

  • 遍历所有柱子分组(ax.containers),不需要手动逐个指定索引,代码更简洁
  • 通过列表推导式判断每个柱子的数值,数值为0时返回空字符串作为标签,非0值保留一位小数显示
  • 不需要修改原始数据集,避免影响绘图的数值坐标计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:24:03