matplotlib中调用get_lines()报AttributeError错误,求解决方法
解决AttributeError: 'function' object has no attribute 'get_lines'的问题
你遇到的这个错误很典型,问题直接出在这一行代码上:
fig = plt.gca
plt.gca是一个函数,作用是获取当前绘图的Axes(坐标轴)对象,但你没有加括号调用它,导致fig变量存储的是函数本身,而不是Axes实例——函数当然没有get_lines()方法,这就是报错的核心原因。
修正步骤
- 先正确调用
plt.gca()获取Axes对象(变量名改成ax更直观,因为它代表坐标轴而非整个画布):
ax = plt.gca()
- 再通过Axes对象调用
get_lines()获取所有绘制的曲线实例:
lines = ax.get_lines()
完整修正代码(附带图例实现)
既然你的目标是为曲线添加图例,这里直接基于修正后的代码完成需求,完全符合教材用get_lines()的要求:
import numpy as np import matplotlib.pyplot as plt num_curves = 3 x = np.linspace(0,1,51) y = np.zeros((x.size, num_curves)) for n in range(num_curves): y[:,n] = np.sin((n+1)*x*2*np.pi) plt.plot(x,y) # 正确获取当前Axes对象 ax = plt.gca() # 获取所有曲线的Line2D实例 lines = ax.get_lines() # 为每条曲线设置图例标签并添加图例 labels = [f'Sin({n+1}×2πx)' for n in range(num_curves)] ax.legend(lines, labels) plt.show()
额外补充
其实绘图时直接给plt.plot传入label参数也能快速加图例,但既然教材指定要用get_lines(),上面的方案就完全贴合要求啦。
内容的提问来源于stack exchange,提问作者rmiller415
相关产品推荐
相关产品推荐

