我发现了一些生成一组small multiples的代码,它运行正常。
fig, axes = plt.subplots(6,3, figsize=(21,21))
fig.subplots_adjust(hspace=.3, wspace=.175)
for ax, data in zip(axes.ravel(), clean_sets):
ax.plot(data.ETo, "o")
for ax, data in zip(axes.ravel(), clean_sets):
行符合.ravel()
,但我不明白这实际上是做什么或为什么有必要。
如果我看一下docs,我会发现以下内容:
返回一个连续的扁平数组。
返回包含输入元素的1-D数组。只在需要时才制作副本。
我猜对应于来自plt.subplot()
的轴的返回是一个无法迭代的多维数组,但实际上我不确定。一个简单的解释将不胜感激。
在这种情况下使用.ravel()
的目的是什么?
答案 0 :(得分:2)
你的猜测是正确的。 plt.subplots()
返回Axes
或几个轴的numpy数组,取决于输入。如果参数nrows
和ncols
定义了2D网格,则返回的numpy数组也将是一个2D数组。
squeeze
参数中的pyplot.subplots
documentation
squeeze
:bool,optional,默认值:True 如果为True,则从返回的Axes对象中挤出额外的维度:
- 如果只构造了一个子图(nrows = ncols = 1),则生成的单个Axes对象将作为标量返回。
- 对于Nx1或1xN子图,返回的对象是1D numpy对象数组,Axes对象作为numpy 1D数组返回。
- 对于NxM,N> 1且M> 1的子图作为2D阵列返回。
如果为False,则根本不进行压缩:返回的Axes对象始终是包含Axes实例的2D数组,即使它最终为1x1。
由于此处您有plt.subplots(6,3)
因此N>1, M>1
,因此生成的对象必然是2D数组,与squeeze
设置的内容无关。
这使得必须展平此数组才能zip
它。选项是
zip(axes.ravel())
zip(axes.flatten())
zip(axes.flat)