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

Python中Seaborn histplot堆叠条形图未按预期堆叠及配色不生效问题

Seaborn实现分组堆叠获胜数条形图方案

核心问题原因

  • 你当前使用的histplot是统计类图表,默认对原始数据做频数计数,无法直接识别你传入的预聚合wins字段作为堆叠高度,所以无法生成预期的堆叠条形图
  • palette未生效通常是因为颜色列表顺序与winner列的唯一值分类顺序不匹配,或者长度和分类数量不一致

实现方案

方案1:使用pandas直接绘制堆叠条形图(推荐,适配预聚合数据)

该方案不需要额外调整seaborn参数,对汇总后的数据适配性更高:

import pandas as pd
import matplotlib.pyplot as plt

# 1. 将长表转换为宽表,索引为分组维度x轴,列名为hue分类,值为堆叠高度
stack_df = black_fmr_summary_low.pivot(
    index="black_first_move", 
    columns="winner", 
    values="wins"
).fillna(0)

# 2. 确认winner分类顺序,调整颜色列表顺序对应
# 可先执行 print(stack_df.columns) 查看分类顺序,再调整color
color = ['white', 'lightgrey', 'black']

# 3. 绘制堆叠条形图
ax = stack_df.plot(
    kind="bar", 
    stacked=True, 
    color=color,
    edgecolor="black" # 增加边框避免白色块和画布背景融合
)
ax.set_ylabel("获胜数")
ax.set_xlabel("黑方先手走法")
plt.legend(title="获胜方")
plt.show()

方案2:调整histplot参数适配需求

如果需要继续使用seaborn histplot,新增weights参数指定堆叠高度为wins字段,删除原有y参数:

import seaborn as sns
import matplotlib.pyplot as plt

color = ['white', 'lightgrey', 'black']
sns.histplot(
    data=black_fmr_summary_low, 
    multiple="stack",
    x="black_first_move", 
    hue="winner",
    weights="wins", # 核心参数:指定每个分类的堆叠高度为预计算的获胜数
    palette=color,
    edgecolor="black"
)
plt.ylabel("获胜数")
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:36:02