使用 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 以后有点贵。
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 以后有点贵。