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

Matplotlib堆叠柱状图bar_label零值显示问题解决及配色优化咨询

问题1:过滤bar_label零值标签的解决方法

你可以通过bar_label的labels参数自定义显示内容,仅对数值大于0的分段显示标签,零值对应位置设为空字符串即可,修改原有标签添加部分的代码如下:

# 修改后的添加标签代码
for c in ax.containers:
    # 仅对高度大于0的条形显示数值,零值显示空
    labels = [f'{val}' if val > 0 else '' for val in c.datavalues]
    ax.bar_label(c, labels=labels, label_type="center")

额外优化建议:你当前的原始数据里存在大量全为0的分组,可以先过滤掉这些没有任何数值的分组再绘图,大幅减少堆叠层数,也能解决图例过于冗长的问题,过滤代码参考:

# 过滤全零分组
dist_lst = [item for item in dist_lst if sum(item) > 0]

问题2:堆叠柱状图配色方案推荐

针对你这种多分类堆叠场景,推荐两个高可读性的配色方案:

  • 不想引入额外依赖,可直接使用Matplotlib自带的tab20/tab20b/tab20c系列分类调色板,是官方专门为多分类场景设计,相邻颜色区分度高,无过亮/过暗的问题,20种颜色不够的话可以拼接两个系列调色板使用。调用方式:
    import matplotlib.pyplot as plt
    colors = plt.cm.get_cmap('tab20', len(dist_lst)).colors
    
  • 可以引入seaborn的husl调色板,能根据你的分类数量自动生成色相均匀分布的颜色,饱和度和亮度默认适配可视化场景,区分度优于普通分类调色板,调用方式:
    import seaborn as sns
    colors = sns.color_palette("husl", len(dist_lst))
    

内容的提问来源于stack exchange,提问作者N.C.C.P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 11:15:03