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

如何用Pandas定位三个堆叠柱状图及解决两类相关问题

解决堆叠柱状图重叠与重复图例问题

我来帮你搞定这两个可视化的问题,咱们一步步拆解:

问题1:解决堆叠柱状图重叠问题

你之前用position参数没生效的原因是,每个df.plot()生成的柱状图默认绑定原DataFrame的x轴索引(0-3),单纯设置position值会让三组柱子挤在同一个x刻度位置上。除了缩小柱宽,更合理的方案是手动指定每组柱子的x坐标,通过偏移量让它们在x轴上依次排列:

  • 先定义基础x坐标:x = np.arange(len(df))(对应4个数据行)
  • 给每个堆叠柱组设置不同的偏移量,比如0、0.25、0.5
  • 配合合适的柱宽(比如0.2),让三组柱子刚好相邻不重叠

问题2:生成唯一类别的图例

因为三个堆叠图都包含B、C、D这几个公共类别,默认图例会重复显示它们。我们可以先创建一个清晰的类别-颜色映射字典,把6个类别对应的颜色统一管理,然后基于这个字典手动创建图例,就能得到只包含唯一类别的图例了。

修改后的完整代码

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

# 生成数据(和你的DataFrame一致)
df = pd.DataFrame(abs(np.random.randn(4, 6)), columns=list('ABCDEF'))

# 定义每个类别的颜色映射(统一管理,避免重复)
color_map = {
    'A': '#a50f15',
    'B': '#9ecae1',
    'C': '#6baed6',
    'D': '#3182bd',
    'E': '#fb6a4a',
    'F': '#fcbba1'
}

# 基础x坐标,对应4个数据行
x = np.arange(len(df))
# 每组柱子的宽度和偏移量
bar_width = 0.2
offsets = [0, bar_width, bar_width*2]

fig, ax = plt.subplots(figsize=(8,6))

# 绘制第一组堆叠柱:A+B+C+D
df[['A', 'B', 'C', 'D']].plot(
    ax=ax,
    kind='bar',
    stacked=True,
    width=bar_width,
    color=[color_map['A'], color_map['B'], color_map['C'], color_map['D']]
)

# 绘制第二组堆叠柱:E+B+C+D
df[['E', 'B', 'C', 'D']].plot(
    ax=ax,
    kind='bar',
    stacked=True,
    width=bar_width,
    color=[color_map['E'], color_map['B'], color_map['C'], color_map['D']],
    position=offsets[1]
)

# 绘制第三组堆叠柱:F+B+C+D
df[['F', 'B', 'C', 'D']].plot(
    ax=ax,
    kind='bar',
    stacked=True,
    width=bar_width,
    color=[color_map['F'], color_map['B'], color_map['C'], color_map['D']],
    position=offsets[2]
)

# 手动创建唯一图例
handles = [plt.Rectangle((0,0),1,1, color=color_map[cat]) for cat in color_map.keys()]
ax.legend(handles, color_map.keys(), ncol=3, title='Categories')

# 设置x轴标签(让x轴刻度更居中清晰)
ax.set_xticks(x + bar_width)
ax.set_xticklabels(df.index)

plt.tight_layout()
plt.show()

关键改动说明

  1. x轴坐标调整:通过offsets数组给每组柱子设置不同的偏移,配合bar_width,让三组柱子在x轴上有序排列,彻底解决重叠问题。
  2. 颜色映射字典:统一管理所有类别的颜色,既保证公共类别(B/C/D)的颜色在三组图中一致,也方便后续创建唯一图例。
  3. 手动创建图例:基于color_map生成自定义的图例手柄(handles),只显示6个唯一类别,避免重复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:17:27