Axes来自plt.subplots()是一个"numpy.ndarray"对象,没有"plot"属性。

27 浏览
0 Comments

Axes来自plt.subplots()是一个"numpy.ndarray"对象,没有"plot"属性。

如果您正在尝试理解错误消息,则下面的信息可能是多余的。请先阅读@user707650答案

使用MatPlotLib,我想要一个通用的脚本,根据我的数据创建以下内容。

一个窗口包含a个子图,按照每列b个子图排列。我想要能够更改ab的值。

如果我有2a个子图的数据,我想要2个窗口,每个窗口中有先前描述的"a个子图,按照每列b个子图排列"。

我要绘制的x和y数据是存储在np.arrays中的浮点数,结构如下:

- 所有图的x数据都相同,长度为5。

 'x_vector': [0.000, 0.005, 0.010, 0.020, 0.030, 0.040]

- 所有图的y数据存储在y_vector中,第一个图的数据存储在索引0到5处,第二个图的数据存储在索引6到11处,第三个图的数据存储在索引12到18处,第四个图的数据存储在索引19到24处,依此类推。

总共,对于这个数据集,我有91个图(即y_vector中存储的546个值)。

尝试:

import matplotlib.pyplot as plt
# 选项:
plots_tot = 14 #总图数。实际上,将有7 * 13 = 91个图。
location_of_ydata = 6 #第n个图的值可以在y_vector的索引'n*6'到'n*6 + 6'处找到。
plots_window = 7 #每个窗口中的总图数。
rows = 2 #行数,即每列的子图数。
# 计算列数:
prim_cols = plots_window / rows
extra_cols = 0
if plots_window % rows > 0:
    extra_cols = 1
cols = prim_cols + extra_cols
print 'cols:',cols
print 'rows:',rows
# 绘图:
n = 0
x = 0
fig, ax = plt.subplots(rows, cols)
while x <= plots_tot:
    ax[x].plot(x_vector, y_vector[n:(n+location_of_ydata)], 'ro')
    if x % plots_window == plots_window - 1:
        plt.show() #每7个图显示一个新窗口。
    n = n + location_of_ydata
    x = x + 1

我得到以下错误:

cols: 4
rows: 2
Traceback (most recent call last):
  File "Script.py", line 222, in 
    ax[x].plot(x_vector, y_vector[n:(n+location_of_ydata)], 'ro')
AttributeError: 'numpy.ndarray' object has no attribute 'plot'

0