我有一个看起来像
的数据框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')
之类的东西(最好没有循环)吗?
答案 0 :(得分:0)
可能有2种选择,一种使用matplotlib,另一种可能是您现在应该绝对选择的,因为它在Pandas上很好用。
您必须使用设置的许多列和行创建一个子图。如果axes
或nrows
设置为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()
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()
我添加了一个列index
以便与df.plot.bar
进行比较。如果您不想删除x='index'
,它将显示一个带有错误的唯一栏。