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

如何在Python中绘制堆叠图?附字典数据及形状不匹配报错

解决堆叠图绘制时的形状不匹配错误

给定以下4组字典数据:

Group_1= {60: 2, 65: 2}
Group_2= {5: 2, 10: 2}
Group_3= {7: 2, 64: 2}
Group_4= {14: 2}

需要绘制堆叠图,要求:

  • X轴为组编号(Group_1到Group_4)
  • Y轴仅使用字典中的值,不显示键

但绘制时出现错误:

ValueError: shape mismatch: objects cannot be broadcast to a single shape.

错误原因

堆叠图要求每个X轴类别对应的Y值序列长度必须完全一致。前3组字典都包含2个值,而Group_4只有1个值,数据形状不匹配,导致无法完成堆叠计算。

解决方法

给数据量不足的组补全长度(比如补0,代表该组没有对应堆叠层),确保所有组的数值列表长度相同。以下是基于matplotlib的完整实现代码:

基础实现代码

import matplotlib.pyplot as plt

# 原始数据
Group_1 = {60: 2, 65: 2}
Group_2 = {5: 2, 10: 2}
Group_3 = {7: 2, 64: 2}
Group_4 = {14: 2}

# 提取各组值,给Group_4补0以匹配其他组的长度
group_values = [
    list(Group_1.values()),
    list(Group_2.values()),
    list(Group_3.values()),
    list(Group_4.values()) + [0]
]

# X轴配置
x_labels = ["Group_1", "Group_2", "Group_3", "Group_4"]
x = range(len(x_labels))

# 绘制两层堆叠图
plt.bar(x, [v[0] for v in group_values], label='堆叠层1')
plt.bar(x, [v[1] for v in group_values], bottom=[v[0] for v in group_values], label='堆叠层2')

# 图表配置
plt.xticks(x, x_labels)
plt.ylabel('数值')
plt.title('组数据堆叠图')
plt.legend()

plt.show()

通用批量处理代码(适配更多堆叠层)

如果后续堆叠层数量有变化,可自动补全所有组的数值长度:

import matplotlib.pyplot as plt

# 原始数据
Group_1 = {60: 2, 65: 2}
Group_2 = {5: 2, 10: 2}
Group_3 = {7: 2, 64: 2}
Group_4 = {14: 2}

groups = [Group_1, Group_2, Group_3, Group_4]
# 获取最大数值长度,作为统一标准
max_length = max(len(g.values()) for g in groups)

# 批量补全所有组的数值列表
processed_values = []
for g in groups:
    vals = list(g.values())
    processed_values.append(vals + [0]*(max_length - len(vals)))

# X轴配置
x_labels = ["Group_1", "Group_2", "Group_3", "Group_4"]
x = range(len(x_labels))

# 循环绘制所有堆叠层
bottom = [0]*len(x_labels)
for layer_idx in range(max_length):
    layer_data = [v[layer_idx] for v in processed_values]
    plt.bar(x, layer_data, bottom=bottom, label=f'堆叠层{layer_idx+1}')
    # 更新下一层的底部基准值
    bottom = [b + d for b, d in zip(bottom, layer_data)]

# 图表配置
plt.xticks(x, x_labels)
plt.ylabel('数值')
plt.title('组数据堆叠图')
plt.legend()

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:45:10