Как получить несколько подзаголовков в 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()
однако что-то вроде этого также будет работать, это не так "чисто", хотя, поскольку вы создаете фигуру с подзаголовками, а затем добавляете поверх них:
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()
читать документацию: библиотек 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()
вы также можете распаковать оси в подзаголовках вызова
и установите, хотите ли вы разделить оси 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()