Цвета - это уровень вашего индекса, поэтому используйте его, чтобы указать цвета. Измените строку кода на:
counts.plot(kind='bar', title='Counts by Wine Color and quality',
color=counts.index.get_level_values(1), alpha=.7)
![enter image description here](https://i.stack.imgur.com/0AfSw.png)
В этом случае просто получается, что matplotlib
может интерпретировать значения в вашем индексе как цвета. В общем, вы могли бы сопоставить уникальные значения с узнаваемыми цветами, например:
color = counts.index.get_level_values(1).map({'red': 'green', 'white': 'black'})
![enter image description here](https://i.stack.imgur.com/12EdW.png)
pandas
что-то делает с порядком построения, но вы всегда можете вернуться к matplotlib
для более надежной циклической обработки цветов. Хитрость здесь в том, чтобы преобразовать color
в категориальную переменную, чтобы она всегда отображалась после groupby
, позволяя указывать только список ['red', 'white']
import matplotlib.pyplot as plt
wine_df['color'] = wine_df.color.astype('category')
counts = wine_df.groupby(['quality', 'color']).count()['pH'].fillna(0)
ind = np.arange(len(counts))
plt.bar(ind, height=counts.values, color=['red', 'white'])
_ = plt.xticks(ind, counts.index.values, rotation=90)
plt.ylim(0,150) # So we an see (9, white)
plt.show()
![enter image description here](https://i.stack.imgur.com/sO8Hg.png)