Как установить один столбец как цвет (оттенок) с меткой сверху - PullRequest
0 голосов
/ 14 апреля 2020

Мой фрейм данных
Это мой фрейм данных

                 release_year    genre   count
     0              1960         Drama    13
     1              1961         Drama    16
     2              1962         Drama    21
     3              1963         Drama    13
     .
     .
     .
     6              1966         Comedy   16

Вот мой код

    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)
    ax.set_xlabel("Year")
    ax.set_ylabel("Production Count") 
    ax.tick_params(axis='both', which='major', labelsize=8.5)

    bar = ax.bar(popular['release_year'],   # i.e. [6, 5, 7, 4, 8, 3, 9]
         popular['count'], # i.e. [2836, 2138, 1079, 216, 193, 30, 5]
         edgecolor='black', linewidth=1)

Моя гистограмма Это то, что я получил

Как мне включить колонку 'жанр', включенную в сюжет? Есть два разных типа (Драма и Комедия), и я хочу, чтобы у каждого бара был цвет в соответствии с тем, к чему они относятся. Я хотел бы сделать ярлык сверху, чтобы его можно было хорошо визуализировать.

Заранее большое спасибо.

1 Ответ

0 голосов
/ 14 апреля 2020

Непосредственно с помощью 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()

resulting bar plot

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