You need to enable JavaScript to run this app. 如何基于Pandas DataFrame按某列分组结果绘制另一列的堆叠直方图
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Pandas DataFrame按某列分组结果绘制另一列的堆叠直方图

解决方法

你使用pd.hist(by='Column A', column='Column B', stacked=True)无法得到预期效果的原因是:by参数的作用是将数据集按指定列的唯一值拆分,为每个分组单独生成子图,和你需要的「同一画布内按分组堆叠展示直方图」的需求不符。

可行实现方案

两种常用实现方法如下,可根据自定义需求选择:
首先导入依赖:

import pandas as pd
import matplotlib.pyplot as plt

方法1:转宽表后用pandas内置绘图接口

先把数据按Column A分组,转换为每列对应一个分组的宽格式,直接调用绘图接口即可:

# 示例数据,替换为你的实际数据即可
df = pd.DataFrame({
    'Column A': ['Foo', 'Bar', 'Baz', 'Foo', 'Bar', 'Baz', 'Foo', 'Bar', 'Baz'],
    'Column B': [5, 46, 100, 10, 52, 87, 17, 39, 92]
})

# 转为宽格式:每列对应Column A的一个分组,值为对应Column B的数值
df_wide = df.pivot(columns='Column A', values='Column B')

# 绘制堆叠直方图,bins参数可调整数值分箱数量
df_wide.plot.hist(stacked=True, edgecolor='white', bins=10)

# 可选:自定义图表样式
plt.xlabel('Column B 数值')
plt.ylabel('频数')
plt.title('按Column A分组堆叠直方图')
plt.legend(title='Column A')
plt.show()

方法2:直接用matplotlib手动拆分分组绘制

如果需要更灵活的样式配置,可手动拆分分组数据后传给matplotlib的hist接口:

# 按Column A拆分Column B的数值
grouped = df.groupby('Column A')['Column B']
group_values = [g.values for _, g in grouped]
group_labels = [name for name, _ in grouped]

# 绘制堆叠直方图
plt.hist(group_values, stacked=True, label=group_labels, edgecolor='white', bins=10)

# 自定义样式
plt.xlabel('Column B 数值')
plt.ylabel('频数')
plt.title('按Column A分组堆叠直方图')
plt.legend(title='Column A')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 08:21:01