Matplotlib双Y轴绘图报list无get_label属性AttributeError
报错产生原因
这个错误的核心是对matplotlib Axes.plot() 方法的返回值理解有误:
- 无论单次调用
plot()绘制几条曲线,方法的返回值始终是**Line2D对象组成的列表**,哪怕你只画1条曲线,返回的也是长度为1的列表,不是单个Line2D对象。
你的代码里:
curve1 = ax1.plot(x, y, label="sin", color='r')实际得到的是[Line2D实例],是列表类型curve2 = ax2.plot(x, z, label="sinh", color='b')同理也是列表类型
后续你定义curves = [curve1, curve2]时,得到的是一个嵌套列表:[[Line2D实例], [Line2D实例]]。当你遍历这个列表执行curve.get_label()时,每次取到的curve其实是内层的列表,Python列表本身没有get_label()方法,就会触发你看到的AttributeError。
修复方案
任选以下一种修改方式即可解决问题:
- 方案1:取
plot()返回列表的第一个元素,直接拿到真正的线条对象,仅修改曲线赋值的两行代码即可,后续逻辑无需调整:
# 给plot返回值加[0]索引,取出列表里的Line2D对象 curve1 = ax1.plot(x, y, label="sin", color='r')[0] curve2 = ax2.plot(x, z, label="sinh", color='b')[0]
- 方案2:不修改plot的赋值逻辑,组装曲线列表时把两个返回的列表直接拼接,平铺得到所有Line2D对象:
# 用列表拼接替代嵌套列表组装,curves里直接存Line2D对象 curves = curve1 + curve2
修改后运行代码,就可以正常同时显示两个Y轴对应曲线的图例,不会再触发属性报错。
内容的提问来源于stack exchange,提问作者Krushna Navle
相关产品推荐
相关产品推荐

