Python 如何根据背景更改条形标签颜色

Python 如何根据背景更改条形标签颜色,python,pandas,matplotlib,bar-chart,Python,Pandas,Matplotlib,Bar Chart,我不熟悉使用python进行数据处理,但通过将找到的答案和其他站点上的答案放在一起,我已经成功地将数据集绘制成带有条形标签的堆叠条形图 但是,我希望基于条颜色的条标签具有不同的文本颜色,以帮助提高可见性(我仅限于条的灰度颜色)。我发现一些示例可以管理这一点,但它们会干扰代码的其他部分,我不确定如何协调这一点。有人能帮忙吗 将熊猫作为pd导入 将matplotlib.pyplot作为plt导入 plt.style.use('ggplot')) ax=df_new2.plot(kind='barh'

我不熟悉使用python进行数据处理,但通过将找到的答案和其他站点上的答案放在一起,我已经成功地将数据集绘制成带有条形标签的堆叠条形图

但是,我希望基于条颜色的条标签具有不同的文本颜色,以帮助提高可见性(我仅限于条的灰度颜色)。我发现一些示例可以管理这一点,但它们会干扰代码的其他部分,我不确定如何协调这一点。有人能帮忙吗

将熊猫作为pd导入
将matplotlib.pyplot作为plt导入
plt.style.use('ggplot'))
ax=df_new2.plot(kind='barh',stacked=True,figsize=(12,10),color=['black','dimgray','darkgray','silver'])
对于ax容器中的c:
#自定义标签以考虑可能没有条形截面的情况
labels=[f'{w:.0f}%'如果(w:=v.get_width())>0.49 else''表示c中的v]
#设置条形图标签
ax.bar_标签(c,标签=标签,标签类型=中心,颜色=雪,填充=3,字体大小=8)
ax.图例(bbox_至_锚=(1.025,1),loc='左上角',borderaxespad=0。)
ax.set_xlim(右=103)
更新:这一次还是运气不好。如果有人能帮忙,请告诉我


您可以创建所需标签颜色的列表,枚举ax.containers,并在循环中为标签颜色编制索引,如下所示。在本例中,我选择了白色标签颜色以显示在黑色和浅灰色背景上,而黑色标签颜色以黑色和银色背景显示,但您可以选择任何想要的颜色

plt.style.use('ggplot')
ax = df_new2.plot(kind='barh', stacked=True, figsize=(12, 10), color=['black', 'dimgray', 'darkgray', 'silver'])

label_colors = ['white', 'white', 'black', 'black']

for i, c in enumerate(ax.containers):
    labels = [f'{w:.0f}%' if (w := v.get_width()) > 0.49 else '' for v in c]
    ax.bar_label(c, labels=labels, label_type='center', color= label_colors[i], padding=3, fontsize=8)

ax.legend(bbox_to_anchor=(1.025, 1), loc='upper left', borderaxespad=0.)
ax.set_xlim(right=103)
plt.show()