如何在matplotlib bar_label中隐藏数值小于指定阈值的柱状图标签
解决方案
你可以通过ax.bar_label()的labels参数自定义显示内容,把低于阈值的数值替换为空字符串即可,修改后的代码如下:
import pandas as pd import matplotlib.pyplot as plt # 预设隐藏阈值 HIDE_THRESHOLD = 0.025 df_plot = pd.crosstab(df['Yr_Lvl_Cd'], df['Achievement_Cd'], normalize='index') ax = df_plot.plot(kind = 'bar', stacked = True, figsize= (10,12)) for c in ax.containers: # 生成自定义标签:低于阈值显示空字符串,否则按需求格式化数值 labels = [f"{val:.2f}" if val >= HIDE_THRESHOLD else "" for val in c.datavalues] ax.bar_label(c, labels=labels, label_type='center', color = "white") plt.show()
逻辑说明
- 堆叠柱状图的每个
ax.containers元素对应一个类别序列的所有柱块,其datavalues属性存储了每个柱块的实际数值,你用了normalize='index'参数,数值范围为0~1,可直接和0.025阈值对比 - 如果需要调整数值显示格式,直接修改列表推导式中的f-string规则即可:比如要显示百分比可改为
f"{val:.1%}",会自动将0.03转换为3.0% - 空字符串不会被matplotlib渲染,自然就实现了隐藏小数值标签的效果,不会出现占位留白问题
内容的提问来源于stack exchange,提问作者uber_puni
相关产品推荐
相关产品推荐

