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

seaborn分组柱状图柱体文本对齐与叠加求和折线图实现

Seaborn分组柱状图叠加双轴折线 问题修复

问题根因说明

  • 分组柱重叠、标注错位:默认seaborn柱图的分组偏移计算和柱宽参数不匹配,标注位置没有绑定实际绘制的柱体坐标
  • 双轴折线显示异常:sns.lineplot默认会对传入数据做自动聚合、x轴排序,和手动排布的柱体x坐标不对齐,且重复计算分组求和值导致结果偏差

可直接运行的修复代码

先导入依赖、构造测试样例数据:

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# 测试用DataFrame,和问题描述的结构对齐
df = pd.DataFrame({
    "group": ["G1", "G1", "G2", "G2", "G3", "G3", "G4", "G4"],
    "category": ["type1", "type2"] * 4,
    "value": np.random.randint(12, 48, size=8)
})

1. 无重叠分组柱+对齐标注实现

手动计算每个分类柱的偏移位置,标注直接绑定柱体对象生成,从根源避免错位:

fig, ax1 = plt.subplots(figsize=(9, 5))
# 基础配置
group_list = df["group"].unique()
cat_list = df["category"].unique()
n_cat = len(cat_list)
bar_width = 0.8 / n_cat  # 单组内所有柱总宽度占0.8,均分避免超出组边界
x_base = np.arange(len(group_list))  # 每个分组的基准x轴坐标

# 预计算每个分组的value求和值,给后续折线用
group_total = df.groupby("group")["value"].sum().reindex(group_list).values

# 逐分类绘制柱体+柱顶标注
for idx, cat in enumerate(cat_list):
    # 按分组顺序对齐当前分类的数值
    cat_vals = df[df["category"] == cat].set_index("group").reindex(group_list)["value"].values
    # 计算当前分类柱的偏移x坐标
    bar_pos = x_base - (n_cat - 1)*bar_width/2 + idx*bar_pos
    # 绘制柱体
    bars = ax1.bar(bar_pos, cat_vals, width=bar_width, label=cat)
    # 自动生成对齐的柱顶标注,padding控制标注和柱顶的间距
    ax1.bar_label(bars, padding=2, fontsize=9)

# 配置左轴样式
ax1.set_xticks(x_base, group_list)
ax1.set_ylabel("分类指标值")
ax1.legend(loc="upper left")

2. 对齐双轴折线实现

不要依赖seaborn的自动聚合逻辑,直接用预计算好的分组求和值、和柱体对齐的基准x坐标绘制折线:

ax2 = ax1.twinx()
# 绘制折线,marker设置折点样式
ax2.plot(x_base, group_total, color="#d62728", marker="o", linewidth=2, label="分组总值")
# 给折点添加数值标注
for x, y in zip(x_base, group_total):
    ax2.text(x, y + 1.5, f"{y}", ha="center", color="#d62728", fontweight="bold")

# 配置右轴样式
ax2.set_ylabel("分组求和值")
ax2.legend(loc="upper right")

plt.tight_layout()
plt.show()

避坑提示:如果坚持使用sns.lineplot绘制折线,必须传入参数estimator=None,且手动传入和柱体完全对齐的x、y序列,关闭seaborn默认的聚合、排序逻辑,否则依然会出现错位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:39:18