使用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
相关产品推荐
相关产品推荐

