Python Pandas - Построение нескольких столбчатых графиков по категориям из кадра данных - PullRequest
0 голосов
/ 22 января 2020

У меня есть датафрейм, который выглядит как

df = pd.DataFrame(data={'ID':[1,1,1,2,2,2], 'Value':[13, 12, 15, 4, 2, 3]})

Index ID Value
0   1   13
1   1   12
2   1   15
3   2   4
4   2   2
5   2   3

, и я хочу построить его по идентификаторам (категориям), чтобы каждая категория имела разные гистограммы,
, поэтому в этом случае у меня будет две цифры,
одна фигура с гистограммой ID = 1,
и вторая отдельная диаграмма с гистограммой ID = 2.

Могу ли я сделать это (желательно без петель) с чем-то вроде df.plot(y='Value', kind='bar')

1 Ответ

0 голосов
/ 23 января 2020
Возможны варианты

2, один из которых использует matplotlib, а другой seaborn, что вам абсолютно необходимо, поскольку он хорошо работает с Pandas.

Pandas с matplotlib

Вы должны создать участок с количеством установленных столбцов и строк. Он дает массив axes в 1-D, если для nrows или ncols установлено значение 1, или для 2-D в противном случае. Затем вы передаете этот объект методу Pandas.

Если число категорий неизвестно или велико, вам нужно использовать al oop.

import pandas as pd
import matplotlib.pyplot as plt

fig, axes = plt.subplots( nrows=1, ncols=2, sharey=True )

df.loc[ df["ID"] == 1, 'Value' ].plot.bar( ax=axes[0] )
df.loc[ df["ID"] == 2, 'Value' ].plot.bar( ax=axes[1] )

plt.show()

Output matplotlib/Pandas

Pandas с Seaborn

Seaborn - самый удивительный графический инструмент, который я знаю. Функция catplot позволяет построить серию графиков в соответствии со значениями столбца при установке аргумента col. Вы можете выбрать тип графика с помощью kind.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_style('white')

df['index'] = [1,2,3] * 2
sns.catplot(kind='bar', data=df, x='index', y='Value', col='ID')
plt.show()

Output Pandas/Seaborn

Я добавил столбец index, чтобы сравнить с df.plot.bar. Если вы не хотите, удалите x='index', и он покажет уникальный бар с ошибками.

Seaborn combines the values by category

...