matplotlib调用plt.plot绘制多图报维度不匹配错误解决方法
报错根因
plt.plot()绘制折线图时,要求传入的横、纵坐标序列长度必须完全一致,才能完成坐标点的一一映射。你的代码中:
- x列表长度为5:
[3, 4, 5, 6, 7] - y、z列表长度均为7:
[5, 12, 19, 21, 31, 27, 35]、[3, 5, 11, 20, 15, 29, 31]
二者维度不匹配,因此触发ValueError。
修复方法
根据实际业务数据逻辑,二选一调整即可:
- 若x轴需要对应7个数据点,补全x列表到7个元素,修正后可运行代码示例:
import matplotlib.pyplot as plt fig, ax = plt.subplots() # 补全x轴序列,保证长度和y、z一致,取值按实际需求替换即可 x = [3, 4, 5, 6, 7, 8, 9] y = [5, 12, 19, 21, 31, 27, 35] z = [3, 5, 11, 20, 15, 29, 31] plt.plot(x, y, label='y序列') plt.plot(x, z, label='z序列') # 可选添加图例、轴标签提升可读性 plt.legend() plt.xlabel('x轴') plt.ylabel('数值') plt.show()
- 若x轴确实只有5个有效取值,裁剪y、z列表到和x长度一致即可,注意保留的元素要和x的取值一一对应,示例:
import matplotlib.pyplot as plt fig, ax = plt.subplots() x = [3, 4, 5, 6, 7] # 按对应关系裁剪y、z到长度5,示例保留前5个元素,可按需调整 y = [5, 12, 19, 21, 31] z = [3, 5, 11, 20, 15] plt.plot(x, y, label='y序列') plt.plot(x, z, label='z序列') plt.legend() plt.show()
补充说明
代码开头创建的ax坐标轴对象未被使用不是本次报错的原因。matplotlib支持两种绘图写法:一种是你所用的plt.plot()这类pyplot接口写法,另一种是ax.plot()这类面向对象的写法,二者效果一致,按需选择即可。
内容的提问来源于stack exchange,提问作者Çağın
相关产品推荐
相关产品推荐

