Как получить несколько подзадач в matplotlib?
Я немного озадачен тем, как работает этот код:
fig, axes = plt.subplots(nrows=2, ncols=2)
plt.show()
Как работает фига, оси в этом случае? Что оно делает?
Также, почему бы этой работе не сделать то же самое:
fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)
Ответы
Ответ 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()
![]()