在Seaborn中绘制堆积条形图以显示聚类[重复]

Posted

技术标签:

【中文标题】在Seaborn中绘制堆积条形图以显示聚类[重复]【英文标题】:Plotting Stackbar chart in Seaborn for showing clustering [duplicate] 【发布时间】:2022-01-05 07:09:21 【问题描述】:

这是我的数据,其中有 Wines%、Fruits% 等,总和为 1,基于 Total_Spent 列。您还可以看到一个集群列:

现在,我想显示一个堆叠条形图,在 x 轴上我将有集群,垂直堆叠条将是每个集群的所有葡萄酒%、肉类% 等。使用此图表,我将能够观察到哪个集群在哪个产品上花费了多少百分比的资金。我正在尝试为此使用 seaborn。谁能帮我找出一种方法来绘制这个堆积条形图?

更新

所以我写了这段代码来获取正确格式的数据:

df_test = df[['Wines%', 'Fruits%', 'Meat%', 'Fish%', 'Sweets%','Gold%', 'Clusters']]
df_unpivoted = df_test.melt(id_vars=['Clusters'], var_name='Category', value_name='Spend%')
df_unpivoted.head()
df_new = pd.pivot_table(df_unpivoted, index=['Clusters','Category'])

数据框如下所示:

我现在如何使用此数据框获得相同的结果?

【问题讨论】:

请帮我现在使用 seaborn 绘制图表 请,请,将测试数据添加为文本,而不是图像。 sns.histplot(data=df_new.reset_index(), x='Clusters', weights='spend%', hue='Category', multiple='fill', discrete=True) 怎么样?请注意,您似乎平等地加权了所有原始行,独立于total_spent 嗨,Johan,我自己很早就得到了解决方案,并且已经编写了草稿,但忘记发布了。你会在下面找到我的答案。无论如何感谢您的帮助 是的,我可以试试 histplot 看看它看起来如何 【参考方案1】:

好的,我用这个实现了解决方案:

df_test = df[['Wines%', 'Fruits%', 'Meat%', 'Fish%', 'Sweets%','Gold%', 'Clusters']]
df_unpivoted = df_test.melt(id_vars=['Clusters'], var_name='Category', value_name='Spend%')
df_unpivoted.head()
df_new = pd.pivot_table(df_unpivoted, index=['Clusters','Category'])
df_new = df_new.reset_index(level=[0,1])
sns.barplot(x='Clusters',y='Spend%', hue='Category', data=df_new)

我必须使用 reset_index 代码将多索引列更改为单个索引列,然后使用 barplot 绘制它。

【讨论】:

你有不必要的代码:(1)cols = ['Wines%', 'Fruits%', 'Meat%', 'Fish%', 'Sweets%','Gold%', 'Clusters'](2)dfm = df_test[cols].melt(id_vars='Clusters', var_name='Cat', value_name='Spend%')(3)p = sns.barplot(data=dfm, x='Clusters', y='Spend%', hue='Cat')

以上是关于在Seaborn中绘制堆积条形图以显示聚类[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何修改 seaborn 图以获取每类的百分比信息?

如何使用 Seaborn 创建 FacetGrid 堆叠条形图?

Pandas - 绘制堆积条形图

如何在 seaborn / matplotlib 中绘制和注释分组条形

绘制堆积条形图

绘制水平堆积条形图不适用于日期中的 x 轴