如何将一个分类列的色调添加到Seaborn条形图(每个列的平均值和标准值)?

2024-04-20 09:54:54 发布

您现在位置:Python中文网/ 问答频道 /正文

sns.barplot(data = df, ci='sd') 给出了每列平均值的条形图,如下所示

barplot

假设有一列名为“category”,它有3种值A、B和C

我想在这个列的条形图中添加一个色调参数,以便根据类别将每个列平均值条分成三个。像这样:

expected

如果我直接添加hue = 'category',我会得到一个错误Cannot use `hue` without `x` and `y`

x和y应该在这里是什么


Tags: cidfdata参数sd色调类别hue
2条回答

根据文档,如果您不传递xy,那么您的数据帧将被解释为“宽格式”,并且每个数字列都将被绘制。然后,如果您希望维护现有的绘图布局,但使用hue='category',则需要使用melt将数据帧转换为“长格式”,使用以前的列,现在的var_name列作为x。如果没有细节,我无法确切地说您需要使用哪些列,但它应该大致如下所示:

melted_df = df.melt(var_name='variable', value_name='value')
sns.barplot(melted_df, x='variable', y='value', hue='category')

这对你有用吗

请注意,通常,Seaborn希望您的数据采用长格式。我想您会发现它使大多数操作更加方便,因为绘图的每个“单元”都表示为groupby中的一个组,这比处理沿行轴和列轴的分组更简单

如果您对每一列都有单独的子批次感到满意,一种方法是:

fig, ax = plt.subplots(1, len(df.columns), figsize=(120,6))
for i in range(len(df.columns)):
    sns.barplot(x='category', y=df.columns[i], ax=ax[i], data=df, ci='sd')

这对你有用吗

相关问题 更多 >