AttributeError: 'numpy.ndarray' object has no attribute 'plot'

1年前 ⋅ 1990 阅读

我们在直接使用 matplotlib.pyplot对数组进行画图的时候,有时候出现一个报错AttributeError: 'numpy.ndarray' object has no attribute 'plot',在网上查找了一圈终于找到了解决办法,整个过程如下:
1.先看看我的画图代码:

def plot_mul_points(array):
    fig,ax = plt.subplots(3,3,figsize=(15,10))  ########这一行十分重要
    for index in range(0,len(array)):
       cur_array =  array[index] #当前数组
       rounds = []
       for i in range(0, len(cur_array)):
           rounds.append(i)
       ax[index].plot(np.array(rounds),np.array(cur_array))  ########这一行也十分重要
    plt.show()

看这里,万变不离其中,只要是你使用下面两行代码参考

fig,ax = plt.subplots(3,3,figsize=(15,10))  #这里获得ax
	....
ax[index].plot(len(cur_array),np.array(cur_array))  #这里使用ax开始画图

2.这是创建画布时,ax是一个array,这个时候我们需要对其进行拉平处理,后我们次使用它来plot,请注意下面#后面的文字说明,修改后的主要代码如下:

fig,ax = plt.subplots(3,3,figsize=(15,10))  #这里获得ax
ax = ax.ravel()     ##########注意:要进行拉平这一步
	....
ax[index].plot(len(cur_array),np.array(cur_array))  #这里使用ax开始画图

3.最后再试试就能画图了,我这里画的代码和图如下:
完整代码:

def plot_mul_points(array):#画出9个图  不需要自规定位置
    fig,ax = plt.subplots(3,3,figsize=(15,10))
    ax = ax.ravel()
    for index in range(0,len(array)):
       cur_array =  array[index] #当前数组
       rounds = []
       for i in range(0, len(cur_array)):
           rounds.append(i)
       ax[index].plot(np.array(rounds),np.array(cur_array))
    plt.show()
#编写测试    
def test():
    array=[[1,2,3,4,5,6,7,8],[1,2,3,4,5,6,7,8],[1,2,3,4,5,6,7,8]
           ,[1,2,3,4,5,6,7,8],[1,2,3,4,5,6,7,8],[1,2,3,4,5,6,7,8]
           ,[1,2,3,4,5,6,7,8],[1,2,3,4,5,6,7,8],[1,2,3,4,5,6,7,8]]
    plot_mul_points(array)

结果图: 微信图片_20230314201114.png