在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 创建 FacetGrid 堆叠条形图?