You need to enable JavaScript to run this app. 如何使用Python matplotlib创建堆叠条形图并解决shape mismatch报错
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python matplotlib创建堆叠条形图并解决shape mismatch报错

matplotlib堆叠条形图形状不匹配的解决方法

报错的核心原因

  • 维度不匹配:代码中手动硬编码了N=5,生成的x轴坐标序列ind = np.arange(N)包含5个元素,但实际从df1中提取的ZOB、KW两列的长度和5无法对齐。你贴出的原始数据源仅包含2条字典记录,就算转为DataFrame,这两列的序列长度也只有2,两边长度不一致,matplotlib无法将两个序列对齐到同一x轴,直接触发形状无法广播的报错。
  • 堆叠逻辑缺失:就算维度对齐,当前代码里两次调用plt.bar()都没有给第二个系列设置bottom参数,两个同位置的条形会完全重叠,根本达不到堆叠展示的效果。

修正后的可运行代码

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

# 基于你提供的原始数据构建DataFrame
data = [{'KW' : 1912927, 'ZOB': 873123},
        {'KW' : 1912927, 'ZOB': 873123}]
df1 = pd.DataFrame(data)

# 自动匹配实际数据生成分组数,不要硬编码N的取值
N = len(df1)
ZOB = df1['ZOB']
KW = df1['KW']

ind = np.arange(N)
width = 0.35

# 绘制第一层ZOB对应条形
p1 = plt.bar(ind, ZOB, width)
# 绘制第二层KW对应条形,通过bottom参数指定堆叠的起始高度为第一层的条形高度
p2 = plt.bar(ind, KW, width, bottom=ZOB)

plt.ylabel('Wartość w zł')
# 加图例区分两个数据系列
plt.legend((p1[0], p2[0]), ('ZOB', 'KW'))
plt.show()

注意事项

如果你确实需要在x轴上展示5个分组,必须保证df1中的ZOB、KW列都有5个对应数值,不能用长度为2的序列去匹配长度为5的x轴坐标,否则依旧会触发形状不匹配的报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 11:15:03