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

使用pylab绘制柱状图时出现ValueError: shape mismatch报错是什么原因?

错误原因

报错ValueError: shape mismatch: objects cannot be broadcast to a single shape的核心原因是参与绘图的参数长度不匹配:

  • x轴坐标列表x_values有10个元素,对应10根柱子的位置
  • y轴数值列表y_values只有7个元素,仅提供了7根柱子的高度
  • x轴刻度标签列表tlabel有10个元素,对应10个刻度
    柱状图要求x轴位置、y轴数值的长度完全一致,刻度标签的长度也要和二者匹配,否则就会触发形状匹配错误。
    另外你注释的pylab.xticks(range(6),rotation=30)参数也错误,range(6)只有6个位置,和实际刻度数量不匹配。
修复方案

根据你的实际数据情况二选一即可:

方案1:仅保留和y值匹配的坐标与标签

如果你只有7组有效数据,把x坐标和刻度标签的长度截断到和y值一致:

import pylab

bar_width=0.5
x_values=[1,2,3,4,5,6,7]
y_values=[3,2,5,7,4,10,12]
tlabel=["0-10", "11-20", "21-30", "31-40", "41-50", "51-60", "61-70"]
pylab.title("Homicide Occurance by Age")
pylab.bar(x_values,y_values,width=bar_width,tick_label=tlabel, align='center',color='b')
pylab.xticks(rotation=30)
pylab.show()

方案2:补全缺失的y值

如果你确实有10组数据,只是漏填了71-80、81-90、90以上三个区间的数值,把y值补全到10个即可:

import pylab

bar_width=0.5
x_values=[1,2,3,4,5,6,7,8,9,10]
# 示例中缺失的三个值用0占位,你替换成自己的实际数据即可
y_values=[3,2,5,7,4,10,12,0,0,0]
tlabel=["0-10", "11-20", "21-30", "31-40", "41-50", "51-60", "61-70", "71-80", "81-90", "Above 90"]
pylab.title("Homicide Occurance by Age")
pylab.bar(x_values,y_values,width=bar_width,tick_label=tlabel, align='center',color='b')
pylab.xticks(rotation=30)
pylab.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:54:03