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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:27:01