如何自定义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
相关产品推荐
相关产品推荐

