Ошибка при повторении нескольких графиков через объект Axes в Python с помощью matplotlib.pyplot - PullRequest
0 голосов
/ 14 апреля 2020
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)

Почему я не могу повторять один и тот же объект массива осей?

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Ваш массив осей является двухмерным. Массив, массивов, графиков. Когда вы используете только 1 для l oop, вы получаете доступ только к первому измерению. Вы можете использовать 2 для петель или, может быть,

for current_axis in axes.flatten():

То есть, если размеры ваших осей не слишком велики. Позднее Флаттен становится немного дороже.

0 голосов
/ 14 апреля 2020

Это потому, что объект Axes является ndarray с размером 2x2, это означает, что каждая строка является другим массивом. Решение легко, только добавьте .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)
...