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

Я немного смущен тем, как работает этот код:

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

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

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

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

спасибо

5 ответов


есть несколько способов сделать это. The 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


читать документацию: библиотек matplotlib.pyplot.сюжетных линий

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.


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

С изменение входа:

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

пример:

import matplotlib.pyplot as plt

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

plt.show()

import matplotlib.pyplot as plt

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

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

enter image description here


  • вы также можете распаковать оси в подзаголовках вызова

  • и установите, хотите ли вы разделить оси 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()