2024-04-20 09:54:54 发布
网友
sns.barplot(data = df, ci='sd') 给出了每列平均值的条形图,如下所示
sns.barplot(data = df, ci='sd')
假设有一列名为“category”,它有3种值A、B和C
我想在这个列的条形图中添加一个色调参数,以便根据类别将每个列平均值条分成三个。像这样:
如果我直接添加hue = 'category',我会得到一个错误Cannot use `hue` without `x` and `y`
hue = 'category'
Cannot use `hue` without `x` and `y`
x和y应该在这里是什么
根据文档,如果您不传递x或y,那么您的数据帧将被解释为“宽格式”,并且每个数字列都将被绘制。然后,如果您希望维护现有的绘图布局,但使用hue='category',则需要使用melt将数据帧转换为“长格式”,使用以前的列,现在的var_name列作为x。如果没有细节,我无法确切地说您需要使用哪些列,但它应该大致如下所示:
x
y
hue='category'
melt
var_name
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')
根据文档,如果您不传递
x
或y
,那么您的数据帧将被解释为“宽格式”,并且每个数字列都将被绘制。然后,如果您希望维护现有的绘图布局,但使用hue='category'
,则需要使用melt
将数据帧转换为“长格式”,使用以前的列,现在的var_name
列作为x
。如果没有细节,我无法确切地说您需要使用哪些列,但它应该大致如下所示:这对你有用吗
请注意,通常,Seaborn希望您的数据采用长格式。我想您会发现它使大多数操作更加方便,因为绘图的每个“单元”都表示为groupby中的一个组,这比处理沿行轴和列轴的分组更简单
如果您对每一列都有单独的子批次感到满意,一种方法是:
这对你有用吗
相关问题 更多 >
编程相关推荐