You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按类别总计数排序seaborn堆叠histplot直方图

问题描述

我通过如下代码处理得到DataFrame对象df_grouped:

df_grouped = df.groupby(['A', 'B'])['A'].count().sort_values(ascending=False)
df_grouped = pd.DataFrame(df_grouped)
new_index = pd.MultiIndex.from_tuples(df_grouped.index)
df_grouped.index = new_index
df_grouped.reset_index(inplace=True)
df_grouped.columns = ['A', 'B', 'count']

处理完成后的df_grouped数据结构如下:

ABcount
A_1B_110
A_1B_251
A_1B_325
A_1B_412
A_1B_52
A_2B_119
A_2B_35
A_3B_518
A_3B_433
A_3B_544
A_4B_129
A_5B_232

我使用如下代码绘制seaborn.histplot堆叠直方图:

fig, ax = plt.subplots(1, 1, figsize=(10,5))
sns.histplot(x='A', hue='B', data=df_grouped, ax=ax, multiple='stack', weights='count')

运行代码后得到的可视化效果如下:
堆叠直方图原始输出

需求:按照A列每个取值对应的总计数,对X轴上的A类别柱子进行排序,尝试多种方法均未实现目标。

实现方法

目前已经验证可行的实现逻辑:先按A列分组计算count列的总和,生成total_count字段,再按照total_count对数据集做降序排序,对应代码如下:

df_grouped['total_count'] = df_grouped.groupby(by='A')['count'].transform('sum')
df_grouped = df_grouped.sort_values(by=['total_count'], ascending=False)

数据排序完成后,直接复用之前的绘图代码即可得到符合预期的排序后堆叠直方图。该实现思路和Redox提出的方案逻辑相近,也可以尝试其他实现方案达成同样效果。


内容的提问来源于stack exchange,提问作者Kelo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 04:27:17