Непосредственно с помощью matplotlib вы можете раскрасить столбцы следующим образом. Для создания легенды требуется пользовательский код :
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from matplotlib.patches import Patch
years = range(1960, 1991)
popular = pd.DataFrame({'release_year': years,
'genre': np.random.choice(['Drama', 'Comedy'], len(years)),
'count': np.random.randint(20, 50, len(years))})
fig = plt.figure(figsize=(20, 6))
title = fig.suptitle("Which genres are most popular from year to year?", fontsize=14,
fontweight='bold')
fig.subplots_adjust(top=0.9, wspace=0.3)
ax = fig.add_subplot(1, 1, 1)
genre_color = {'Drama': 'crimson', 'Comedy': 'limegreen'}
ax.bar(popular['release_year'],
popular['count'],
color=[genre_color[i] for i in popular['genre']],
edgecolor='black', linewidth=1)
ax.set_xlabel("Year")
ax.set_ylabel("Production Count")
ax.tick_params(axis='both', which='major', labelsize=8.5)
legend_elements = [Patch(facecolor=genre_color[gen], edgecolor='b', label=gen)
for gen in genre_color]
ax.legend(handles=legend_elements)
plt.show()
PS: Seaborn также имеет некоторые стандартная функциональность для создания гистограмм (dodge=False
предотвращает, что код ожидает отдельные столбцы жанра в год). Обратите внимание, что в целом изменение тиков и меток лучше всего происходит после создания гистограммы, а не до. Например, Seaborn устанавливает свои собственные метки, и вы можете изменить их впоследствии.
import seaborn as sns
sns.barplot(x='release_year', y='count', data=popular, hue='genre', palette=genre_color, dodge=False)