我正在尝试制作一个条形图,其中包含DataFrame
中的所有观察结果,如下所示:Dataframe(行=年,列=对象,值=年内对象的违规行为)
使用默认的pandas plot
时,我得到了正确的图表类型:
cluster_yearly_results_df.plot.bar()
但是,我想使用seaborn,我无法输入宽格式数据帧,使用:
sns.barplot(data=cluster_yearly_results_df)
我可以使用seaborn来做我想做的事吗?
答案 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)