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

Matplotlib子图调用plot添加第三条折线显示异常问题

问题成因

这是对matplotlib plot() 方法的参数规则理解偏差导致的。
Axes.plot() 接收位置参数时,是按*每一组折线对应x数据, y数据, [可选格式字符串]*的规则解析的,不是把同一个x放最前面,后面跟多少个y就会自动绘制多少条线。
你写的axis[0, 0].plot(x, y1, y2, y3)实际解析逻辑完全不符合预期:

  • 第一组线被识别为:横轴用x,纵轴用y1,后面跟的y2被当成了格式配置参数(这个位置本来应该传类似'r--'这种控制颜色、线型的字符串)
  • 最后剩下的y3会被识别为下一组线的横轴数据,没有对应的纵轴参数,绘制结果自然错乱。
    之前只传x、y1、y2的时候看起来“正常”只是巧合:y2是数值列,没有触发格式参数的校验报错,实际那时候y2根本没有被作为第二条折线的数值绘制,你看到的图本身就不符合绘图逻辑。
正确实现方法

两种常用写法都可以实现同子图绘制3条折线:

方法1:逐条调用plot绘制每条线

这是最不容易出错、自定义程度最高的写法,可以单独给每条线设置颜色、线型、图例标签:

# 绘制三条折线
axis[0, 0].plot(x, y1, label='指标1')
axis[0, 0].plot(x, y2, label='指标2')
axis[0, 0].plot(x, y3, label='指标3')

# 补充配置(可选)
axis[0, 0].set_xticks(x) # 固定x轴刻度,避免月份标识显示不全
axis[0, 0].legend() # 显示图例

方法2:按参数组规则一次性传入

如果不需要单独给每条线做特殊配置,也可以按每组x,y的顺序一次性传入,因为三条线共用同一个x轴数据,重复传入x即可:

axis[0, 0].plot(x, y1, x, y2, x, y3)

提示:你的x列存的是'01'、'02'这类字符串格式的月份值,matplotlib会默认按分类值处理,绘制完建议检查x轴刻度是否正常显示,如有错乱可以通过set_xticklabels()手动指定刻度文本。

内容的提问来源于stack exchange,提问作者Fernando del Valle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:39:27