使用seaborn barplot绘制宽幅数据帧

时间:2016-05-11 23:08:43

标签: python pandas seaborn

我正在尝试制作一个条形图,其中包含DataFrame中的所有观察结果,如下所示:Dataframe(行=年,列=对象,值=年内对象的违规行为)

使用默认的pandas plot时,我得到了正确的图表类型:

cluster_yearly_results_df.plot.bar()

Correct Bar Plot

但是,我想使用seaborn,我无法输入宽格式数据帧,使用:

sns.barplot(data=cluster_yearly_results_df)

我可以使用seaborn来做我想做的事吗?

1 个答案:

答案 0 :(得分:5)

seaborn.barplot文档说:

  

条形图表示对具有每个矩形高度的数值变量的集中趋势的估计,并使用误差条提供该估计值周围的不确定性的一些指示。

换句话说,目的是为一个变量表示多个值,其中一个条形代表mean,误差条代表std。您希望使用条形来表示单个值,如pandas.plot.bar()所示。

话虽如此,您可以调整DataFrame,如下所示,以匹配seaborn界面。从与您类似的DataFrame开始:

df = pd.DataFrame(np.random.randint(low=0, high=10, size=(10, 3)), columns=list('ABC'))

   A  B  C
0  7  6  4
1  3  5  9
2  3  0  5
3  0  1  3
4  9  7  7

使用.stack().reset_index()创建两列,用于唯一标识y中的每个值:

df = df.stack().reset_index()
df.columns = ['x', 'hue', 'y']

产生:

   x hue  y
0  0   A  6
1  0   B  1
2  0   C  2
3  1   A  5
4  1   B  7

然后绘图:

sns.barplot(y='y', x='x', hue='hue', data=df)

enter image description here