使用 matplotlib 编辑堆积条形图中的特定标签

问题描述 投票:0回答:1

我正在按照本教程/示例创建堆积条形图,但在我的例子中,我代表特定技术人员收到的各种类型的支持票证。因此,并非所有类型都始终存在,因此某些条形值为零,并且并非每行的所有总数加起来都相同。我正在尝试找到一种方法来编辑标签,使它们要么是透明的,要么在给定条宽度为零时根本不应用,因为现在其他类别之间出现“0”标签。我可以通过如下方式访问宽度:

    for rect in rects:
        if rect.get_width() == 0:
            #delete label, set opacity, etc

但是,如果我尝试做类似

rect.set_width(None)
之类的事情,它就会出错,这让我觉得我不能直接去掉标签。似乎也没有办法直接使用 matplotlib 设置不透明度。有谁知道去除无关标签的方法吗? 显示无关标签的堆叠条形图

python matplotlib bar-chart stacked-bar-chart
1个回答
0
投票

在循环中, ax.bar_label 包含 Annotation 对象的列表。您可以循环遍历每个对象以使用 .get_text() 获取其文本,如果它是“0”,则使用 .set_text("") 删除标签。

for i, (colname, color) in enumerate(zip(category_names, category_colors)):
    widths = data[:, i]
    starts = data_cum[:, i] - widths
    rects = ax.barh(labels, widths, left=starts, height=0.5,
                    label=colname, color=color)
    r, g, b, _ = color
    text_color = 'black' if r * g * b < 0.5 else 'darkgrey'
    
    all_labels = ax.bar_label(rects, label_type='center', color=text_color)
    for lab in all_labels:
        if lab.get_text() == '0': 
            lab.set_text("")  
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.