flat
- это атрибут numpy
массивов, который возвращает итератор. Например, если у вас есть 2d массив, подобный этому:
import numpy as np
arr2d = np.arange(4).reshape(2, 2)
arr2d
# array([[0, 1],
# [2, 3]])
атрибут flat
предоставляется в качестве удобного способа перебора этого массива, как если бы он был массивом 1d:
for value in arr2d.flat:
print(value)
# 0
# 1
# 2
# 3
Вы также можете сгладить массив с помощью метода flatten
:
arr2d.flatten()
# array([0, 1, 2, 3])
Итак, возвращаясь к вашему вопросу, вы указываете:
ncols
до 1 и nrows
до значения больше 1 или наоборот, вы получаете оси в массиве 1d numpy, в этом случае атрибут flat
возвращает тот же массив.
- и
ncols
и nrows
до значений больше 1, вы получаете оси в 2d массиве, и в этом случае атрибут flat
возвращает плоский массив.
- и
ncols
и nrows
к 1, вы получаете объект оси, который не имеет атрибута flat
.
Таким образом, возможное решение состояло бы в том, чтобы превратить ваш ax
объект в массив numpy
каждый раз:
fig, ax = plt.subplots(nrows=nrows, ncols=ncols, figsize=figsize)
ax = np.array(ax)
for i, axi in enumerate(ax.flat):
axi.plot(...)