Python Pandas-从数据框中按类别绘制多个条形图

时间:2020-01-22 10:06:57

标签: python pandas pandas-groupby

我有一个看起来像

的数据框
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(类别)进行绘制,以便每个类别具有不同的条形图,
所以在这种情况下,我会有两个数字,
条形图为ID = 1的一个图形,
和ID = 2的第二个单独的图形条形图。

我可以使用df.plot(y='Value', kind='bar')之类的东西(最好没有循环)吗?

1 个答案:

答案 0 :(得分:0)

可能有2种选择,一种使用matplotlib,另一种可能是您现在应该绝对选择的,因为它在Pandas上很好用。

带有matplotlib的熊猫

您必须使用设置的许多列和行创建一个子图。如果axesnrows设置为1,则以1-D给出数组ncols,否则以2-D给出。然后,将此对象提供给Pandas plot方法。

如果类别数量未知或很高,则需要使用循环。

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

熊猫海生

Seaborn是我所知道的最神奇的图形工具。设置参数col时,函数catplot可以根据列的值绘制一系列图形。您可以使用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