利用海运条形图绘制宽幅数据帧

2022-02-27 00:00:00 python pandas seaborn

问题描述

我正在尝试生成一个条形图,其中包含我的DataFrame中的所有观察结果,如下所示:Dataframe(行=年,列=对象,值=对象在年的冲突)

使用默认 pandas 时,我获得了正确的图形类型plot

cluster_yearly_results_df.plot.bar()

Correct Bar Plot

但是,我想使用海运,但在输入宽格式数据帧时遇到问题,使用:

sns.barplot(data=cluster_yearly_results_df)

我可以使用海运来做我想做的事情吗?


解决方案

seaborn.barplot文档说明:

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

换句话说,其目的是用表示mean的单个条和表示std的错误条表示一个变量的多个值。您希望像pandas.plot.bar()那样用条形图表示单个值。

说到这里,您可以调整您的DataFrame,如下所示以匹配seaborn界面。以与您的DataFrame类似的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)

相关文章