使用 matplotlib.pyplot 在 Python 中通过轴对象迭代多个图时出错

Error when iterating multiple plots through Axes Object in Python by using matplotlib.pyplot

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,2*np.pi,500)
y = np.sin(x**2)
fig, axes = plt.subplots(2,2)
for current_axis in axes:
    current_axis.plot(x,y)

结果是:

AttributeError: 'numpy.ndarray' object has no attribute 'plot'

如果我不重复执行下面的代码,它就可以工作

axes[0, 0].plot(x, y)
axes[1, 1].plot(x, x**2)

为什么我无法迭代同一个 Axes Array 对象?

这是因为 Axes 对象是一个维度为 2x2 的 ndarray,这意味着每一行都是另一个数组。解决方法很简单,只需将 .flatten() 添加到 Axes 对象使其成为一维:

import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0,2*np.pi,500)
y=np.sin(x**2)
fig, axes=plt.subplots(2,2)
for current_axis in axes.flatten():
    current_axis.plot(x,y)

您的坐标区数组是二维的。一个数组,数组,绘图。当您只使用 1 个 for 循环时,您只能访问第一个维度。您可以使用 2 个 for 循环,或者

for current_axis in axes.flatten():

如果你的坐标轴尺寸不是太大的话。 Flatten 以后有点贵。