import matplotlib.pyplot as plt
fig, axes = plt.subplots(ncols=2,nrows=3, sharex=True, sharey=True)
for i, ax in enumerate(axes.flat):
ax.scatter([i//2+1, i],[i,i//3])
plt.show()
这里,axes是轴的numpy的阵列,
print(type(axes))
>
print(axes.shape)
> (3L, 2L)
axes.flat不是功能,它是numpy.ndarray的一个属性:numpy.ndarray.flat
ndarray.flat 数组上的一维迭代器。
这是一个numpy.flatiter实例,其行为类似于Python的内置迭代器对象,但不是其子类。
实施例:
import numpy as np
a = np.array([[2,3],
[4,5],
[6,7]])
for i in a.flat:
print(i)
这将打印数2 3 4 5 6 7。
作为阵列上的迭代符,则可以用它来循环在从轴的3×2的阵列中的所有轴,
for i, ax in enumerate(axes.flat):
对于每次迭代,将来自该阵列产生的下一个坐标轴,使得您可以轻松地在单个循环中绘制所有坐标轴。
另一种方法是使用axes.flatten(),其中flatten()是numpy数组的方法。它不是迭代器,而是返回数组的扁平版本:
for i, ax in enumerate(axes.flatten()):
从外部看没有区别。但是迭代器实际上并不创建新的数组,因此可能会稍微快一点(尽管这对于matplotlib轴对象来说永远不会显而易见)。
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(...)