是否有一种简单/干净的方法来迭代由子图返回的轴数组
nrow = ncol = 2 a = [] fig, axs = plt.subplots(nrows=nrow, ncols=ncol) for i, row in enumerate(axs): for j, ax in enumerate(row): a.append(ax) for i, ax in enumerate(a): ax.set_ylabel(str(i))
甚至适用于nrow
或ncol == 1
.
我尝试了列表理解,如:
[element for tupl in tupleOfTuples for element in tupl]
但是如果nrows
或者那就失败了ncols == 1
该ax
返回值是一个numpy的阵列,其可以,我相信,重新成形而不的数据的任何复制.如果您使用以下内容,您将获得一个可以干净地迭代的线性数组.
nrow = 1; ncol = 2; fig, axs = plt.subplots(nrows=nrow, ncols=ncol) for ax in axs.reshape(-1): ax.set_ylabel(str(i))
当ncols和nrows都是1时,这不成立,因为返回值不是数组; 您可以将返回值转换为一个元素,以保持一致性,尽管感觉有点像cludge:
nrow = 1; ncol = 1; fig, axs = plt.subplots(nrows=nrow, ncols=nrow) axs = np.array(axs) for ax in axs.reshape(-1): ax.set_ylabel(str(i))
重塑文档.该参数-1
导致重塑推断输出的维度.
我不确定它何时添加,但现在有一个squeeze
关键字参数.这样可以确保结果始终是2D numpy数组.将其转换为一维数组很容易:
fig, ax2d = subplots(2, 2, squeeze=False) axli = ax2d.flatten()
适用于任意数量的子图,不需要单斧的技巧,因此比接受的答案更容易(squeeze
当时可能还不存在).
该fig
返回值plt.subplots
具有所有轴的列表.要迭代图中的所有子图,您可以使用:
nrow = 2 ncol = 2 fig, axs = plt.subplots(nrow, ncol) for i, ax in enumerate(fig.axes): ax.set_ylabel(str(i))
这也适用于nrow == ncol == 1
.