代码之家  ›  专栏  ›  技术社区  ›  Charlie Horn

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

  •  1
  • Charlie Horn  · 技术社区  · 8 月前

    我在跟踪 this tutorial/example 创建堆叠条形图,但在我的例子中,我代表的是特定技术人员收到的各种类型的支持票。因此,并非所有类型都始终存在,因此一些条形值为零,并且并非每行的所有总计加起来都是相同的金额。我正试图找到一种编辑标签的方法,这样如果给定的条形图宽度为零,标签要么是透明的,要么根本不应用,因为现在其他类别之间出现了一个“0”标签。我可以通过以下方式访问宽度:

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

    然而,如果我尝试做类似的事情 rect.set_width(None) 它出错了,这让我觉得我不能就这么摆脱标签。似乎也没有直接使用matplotlib设置不透明度的方法。有人知道去除多余标签的方法吗? stacked bar chart showing extraneous lables

    1 回复  |  直到 8 月前
        1
  •  0
  •   rehaqds    8 月前

    在循环中,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("")