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

