Python matplotlib中的axes.flat做什么?

Python matplotlib中的axes.flat做什么?,python,matplotlib,Python,Matplotlib,我见过使用matplotlib的各种程序,这些程序使用axes.flat函数,如以下代码: for i, ax in enumerate(axes.flat): 这是做什么的呢?让我们看一个简单的例子,我们用 这里,轴是一个轴的numpy数组 print(type(axes)) > <type 'numpy.ndarray'> print(axes.shape) > (3L, 2L) 它将打印数字2 3 4 5 6 7 作为阵列上的一个interator,您可以使用它

我见过使用matplotlib的各种程序,这些程序使用axes.flat函数,如以下代码:

for i, ax in enumerate(axes.flat):

这是做什么的呢?

让我们看一个简单的例子,我们用

这里,
是一个轴的numpy数组

print(type(axes))
> <type 'numpy.ndarray'>
print(axes.shape)
> (3L, 2L)
它将打印数字
2 3 4 5 6 7

作为阵列上的一个interator,您可以使用它在3x2轴阵列的所有轴上循环

for i, ax in enumerate(axes.flat):
对于每个迭代,它将从该数组中生成下一个轴,这样您就可以轻松地在单个循环中绘制所有轴

另一种方法是使用
axes.flatte()
,其中
flatte()
是numpy数组的方法。它不是迭代器,而是返回数组的展开版本:

for i, ax in enumerate(axes.flatten()):
从外面看,两者之间没有区别。但是,迭代器实际上并不创建新数组,因此可能会稍微快一点(尽管在matplotlib axes对象中永远不会注意到这一点)

与单独迭代行和列的幼稚方法相比,迭代Axis数组的展开版本的优点是可以节省一个循环

for row in axes:
    for ax in row:
        ax.scatter(...)

请补充一些解释。
for i, ax in enumerate(axes.flatten()):
flat1 = [ax for ax in axes.flat]
flat2 = axes.flatten()
print(flat1 == flat2)
> [ True  True  True  True  True  True]
for row in axes:
    for ax in row:
        ax.scatter(...)
fig, ax = plt.subplots(3, 3, figsize=())
ax = ax.flatten()
for i, col in enumerate(columns):
    sns.distplot(d2[col], ax=ax[i])
plt.tight_layout()