Matplotlib绘图报错:x与y维度不匹配但数组长度一致,如何解决?
核心排查方向:变量名与变量类型
检查绘图时的y轴变量是否为目标列表
你代码报错行用的是blue_loss_due_to_energy,但你提到的统计结果列表是c_loss_due_to_energy_score——大概率是变量名写错了。如果blue_loss_due_to_energy是你迭代中用来累加的单个数值变量(比如每次执行blue_loss_due_to_energy +=1的那个),那它就是单一值,长度为1,和x的长度10自然不匹配。把绘图代码里的变量改成c_loss_due_to_energy_score即可。确认目标列表的实际类型与内容
别只打印len(c_loss_due_to_energy_score),在绘图前直接打印变量本身,比如:print(c_loss_due_to_energy_score) print(type(c_loss_due_to_energy_score))确保它是包含10个元素的列表,而不是被意外转换成了单个值(比如迭代中不小心写了
c_loss_due_to_energy_score = a_wins,而非c_loss_due_to_energy_score.append(a_wins))。检查迭代中的追加逻辑
确认每次迭代都是用append()方法添加元素,而非重新赋值。正确写法示例:# 初始化列表 c_loss_due_to_energy_score = [] c_loss_due_to_energy = 0 # 迭代过程 for i in range(10): # 你的统计逻辑 if 满足损失条件: c_loss_due_to_energy +=1 # 追加到结果列表 c_loss_due_to_energy_score.append(c_loss_due_to_energy)如果写成
c_loss_due_to_energy_score = [c_loss_due_to_energy],最终列表只会有一个元素,即使中间打印过长度,后续也可能被覆盖。
快速验证方法
把绘图代码改成用已知长度的列表测试:
plt.plot(x, [1,2,3,4,5,6,7,8,9,10])
如果能正常运行,说明问题肯定出在你传入的blue_loss_due_to_energy变量上,回到第一步检查变量名和内容即可。
内容的提问来源于stack exchange,提问作者The Pointer

