Python 根据字符串值更改条形图的颜色

Python 根据字符串值更改条形图的颜色,python,pandas,matplotlib,bar-chart,Python,Pandas,Matplotlib,Bar Chart,我有一个工作日的数据框。我需要在条形图上用不同的颜色突出显示周末(“周六”和“周日”)。我找到了一些解决方案,可以通过index.get\u indexer设置不同的颜色。但是,我如何通过设置条件来更有效地实现这一点呢?谢谢你的帮助 # create an example of my df dates = pd.DataFrame({'dates': ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sun

我有一个工作日的数据框。我需要在条形图上用不同的颜色突出显示周末(“周六”和“周日”)。我找到了一些解决方案,可以通过index.get\u indexer设置不同的颜色。但是,我如何通过设置条件来更有效地实现这一点呢?谢谢你的帮助

# create an example of my df
dates = pd.DataFrame({'dates': ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday',
                               'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],
                   'stats':[10,20,30,40,50,60,70,10,20,30,40,50,60,70],
                   'other':[44,55,66,88,33,22,11,44,55,66,88,33,22,11]})

# And plot it...
ax = dates.plot(x='dates', y='stats', kind='bar', color='b')

    ax.patches[dates.index.get_indexer([5])[0]].set_facecolor('orange')
    ax.patches[dates.index.get_indexer([6])[0]].set_facecolor('orange')
# etc...

    ax.legend()
    plt.show()

您可以在数据帧上循环,并将匹配“星期六”或“星期日”的补丁设置为橙色

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# create an example of my df
dates = pd.DataFrame({'dates': ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday',
                               'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],
                   'stats':[10,20,30,40,50,60,70,10,20,30,40,50,60,70],
                   'other':[44,55,66,88,33,22,11,44,55,66,88,33,22,11]})

ax = dates.plot(x='dates', y='stats', kind='bar', color='b')

weekend = (dates['dates']=='Sunday') | (dates['dates']=='Saturday')
for i,b in enumerate(weekend):
    if b:
        ax.patches[i].set_facecolor('orange')

ax.legend()
plt.show()

不确定这是否是最有效的方法。

是的,它有效。谢谢!是否可以使用周末df
weekend=dates[(dates['dates']='Sunday')|(dates['dates']='Saturday')]
来避免装箱两个df?是的,这也是可能的,虽然效率可能相同,但代码少一行。我更新了答案。