Подтвердить что ты не робот

Как получить несколько подзадач в matplotlib?

Я немного озадачен тем, как работает этот код:

fig, axes = plt.subplots(nrows=2, ncols=2)
plt.show()

Как работает фига, оси в этом случае? Что оно делает?

Также, почему бы этой работе не сделать то же самое:

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)
4b9b3361

Ответ 1

Есть несколько способов сделать это. Метод subplots создает фигуру вместе с subplots, которые затем сохраняются в массиве ax. Например:

import matplotlib.pyplot as plt

x = range(10)
y = range(10)

fig, ax = plt.subplots(nrows=2, ncols=2)

for row in ax:
    for col in row:
        col.plot(x, y)

plt.show()

enter image description here

Тем не менее, что-то вроде этого также будет работать, хотя и не так "чисто", поскольку вы создаете фигуру с подзадачами, а затем добавляете поверх них:

fig = plt.figure()

plt.subplot(2, 2, 1)
plt.plot(x, y)

plt.subplot(2, 2, 2)
plt.plot(x, y)

plt.subplot(2, 2, 3)
plt.plot(x, y)

plt.subplot(2, 2, 4)
plt.plot(x, y)

plt.show()

enter image description here

Ответ 2

import matplotlib.pyplot as plt

fig, ax = plt.subplots(2, 2)

ax[0, 0].plot(range(10), 'r') #row=0, col=0
ax[1, 0].plot(range(10), 'b') #row=1, col=0
ax[0, 1].plot(range(10), 'g') #row=0, col=1
ax[1, 1].plot(range(10), 'k') #row=1, col=1
plt.show()

enter image description here

Ответ 3

прочитайте документацию: matplotlib.pyplot.subplots

pyplot.subplots() возвращает кортеж fig, ax, который распаковывается двумя переменными, используя обозначение

fig, axes = plt.subplots(nrows=2, ncols=2)

код

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)

не работает, потому что subplots() - это функция в pyplot, не являющаяся членом объекта Figure.

Ответ 4

Возможно, вас заинтересует тот факт, что начиная с версии 2.1 для matplotlib, второй код из вопроса также работает нормально.

Из журнала изменений:

В классе Figure теперь есть метод subplots. В классе Figure теперь есть метод subplots(), который ведет себя так же, как pyplot.subplots(), но на существующей фигуре.

Пример:

import matplotlib.pyplot as plt

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)

plt.show()

Ответ 5

  • Вы также можете распаковать оси в вызове subplots

  • И установите, хотите ли вы делить оси X и Y между вспомогательными участками

Как это:

import matplotlib.pyplot as plt
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex=True, sharey=True)
ax1.plot(range(10), 'r')
ax2.plot(range(10), 'b')
ax3.plot(range(10), 'g')
ax4.plot(range(10), 'k')
plt.show()