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