matplotlib 如何根据背景改变条形标签颜色

vx6bjr1n  于 2023-06-30  发布在  其他
关注(0)|答案(2)|浏览(133)

我刚开始使用python处理数据,但通过将here和其他网站上的答案放在一起,我已经设法将我的数据集绘制成一个带有条形标签的堆叠条形图。
但是,我希望条形标签根据条形颜色具有不同的文本颜色,以帮助可见性(我限制条形的灰度颜色)我已经找到了一些管理此问题的示例,但它们会干扰代码的其他部分,我不知道如何协调这一点。有人能帮忙吗?

import pandas as pd
import matplotlib.pyplot as plt

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

for c in ax.containers:
    
    # customize the label to account for cases when there might not be a bar section
    labels = [f'{w:.0f}%' if (w := v.get_width()) > 0.49 else '' for v in c ] 
    
    # set the bar label
    
    ax.bar_label(c, labels=labels, label_type='center',color='snow',padding=3,fontsize=8)

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

更新:运气不好,这一个仍然。如果有人能帮忙请告诉我。

bfhwhh0e

bfhwhh0e1#

正确的方法是通过axes.texts访问标签。

for i, text in enumerate(ax.texts):
        text.set_color(label_colors[I])
bjg7j2ky

bjg7j2ky2#

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

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()

相关问题