我正在按照本教程/示例创建堆积条形图,但在我的例子中,我代表特定技术人员收到的各种类型的支持票证。因此,并非所有类型都始终存在,因此某些条形值为零,并且并非每行的所有总数加起来都相同。我正在尝试找到一种方法来编辑标签,使它们要么是透明的,要么在给定条宽度为零时根本不应用,因为现在其他类别之间出现“0”标签。我可以通过如下方式访问宽度:
for rect in rects:
if rect.get_width() == 0:
#delete label, set opacity, etc
但是,如果我尝试做类似
rect.set_width(None)
之类的事情,它就会出错,这让我觉得我不能直接去掉标签。似乎也没有办法直接使用 matplotlib 设置不透明度。有谁知道去除无关标签的方法吗?
显示无关标签的堆叠条形图
在循环中, 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("")