легенда гистограммы, основанная на раскраске баров по группе, а не по значению - PullRequest
1 голос
/ 29 января 2020

Я создал гистограмму, как описано здесь , где у меня есть несколько переменных (указано в столбце «значение»), и они принадлежат к повторяющимся группам. Я покрасил полосы по их членству в группе.

Я хочу создать легенду, в конечном итоге эквивалентную словарю цветов, показывающую цвет, соответствующий данному членству в группе.

Код здесь:

d = {'value': [1, 2, 4, 5, 7 ,10], 'group': [1, 2, 3, 2, 2, 3]}
df = pd.DataFrame(data=d)
colors = {1: 'r', 2: 'b', 3: 'g'}
df['value'].plot(kind='bar', color=[colors[i] for i in df['group']])
plt.legend(df['group'])

Таким образом, я просто получаю легенду с одним цветом (1) вместо (1, 2, 3).

Спасибо!

Ответы [ 2 ]

1 голос
/ 29 января 2020

С помощью pandas вы можете создать свою собственную легенду следующим образом:

from matplotlib import pyplot as plt
from matplotlib import patches as mpatches
import pandas as pd

d = {'value': [1, 2, 4, 5, 7 ,10], 'group': [1, 2, 3, 2, 2, 3]}
df = pd.DataFrame(data=d)
colors = {1: 'r', 2: 'b', 3: 'g'}
df['value'].plot(kind='bar', color=[colors[i] for i in df['group']])

handles = [mpatches.Patch(color=colors[i]) for i in colors]
labels = [f'group {i}' for i in colors]
plt.legend(handles, labels)

plt.show()

result

0 голосов
/ 29 января 2020

Вы можете использовать sns:

sns.barplot(data=df, x=df.index, y='value', 
            hue='group', palette=colors, dodge=False)

Выход:

enter image description here

...