Как сделать оси занимают несколько подзаговоров с помощью pyplot (Python)
Я хотел бы иметь три сюжета в одной фигуре. Эта цифра должна иметь макет подзаголовка два на два, где первый график должен занимать первые две ячейки подзаголовка (т.е. Весь первый ряд ячеек графика), а другие графики должны быть расположены под первым в ячейках 3 и 4. Я знаю, что Matlab позволяет это, используя команду subplot так
subplot(2,2,[1,2]) % the plot will span subplots 1 and 2
Возможно ли также, что в pyplot одна ось занимает более одного подзаголовка?
Докшрин из pyplot.subplot не говорит об этом.
Кто-нибудь получил легкое решение?
Спасибо заранее
Ответы
Ответ 1
Вы можете просто сделать:
x = numpy.arange(0, 7, 0.01)
subplot(2, 1, 1)
plot(x, sin(x))
subplot(2, 2, 3)
plot(x, cos(x))
subplot(2, 2, 4)
plot(x, sin(x)*cos(x))
i.e, первый график действительно представляет собой график в верхней половине (рисунок разделен только на 2 * 1 = 2 ячейки), а следующие две меньшие графики выполняются в сетке 2 * 2 = 4 ячейки.
Третий аргумент subplot()
- это позиция графика внутри сетки:
например, во втором подзаголовке (subplot(2, 2, 3)
), оси перейдут в третью секцию матрицы 2 * 2, то есть в нижний левый угол.
Ответ 2
Чтобы иметь несколько подлодок с осью, вы можете просто:
from matplotlib import pyplot as plt
import numpy as np
b=np.linspace(-np.pi, np.pi, 100)
a1=np.sin(b)
a2=np.cos(b)
a3=a1*a2
plt.subplot(221)
plt.plot(b, a1)
plt.title('sin(x)')
plt.subplot(222)
plt.plot(b, a2)
plt.title('cos(x)')
plt.subplot(212)
plt.plot(b, a3)
plt.title('sin(x)*cos(x)')
plt.show()
![enter image description here]()
Другой способ -
plt.subplot(222)
plt.plot(b, a1)
plt.title('sin(x)')
plt.subplot(224)
plt.plot(b, a2)
plt.title('cos(x)')
plt.subplot(121)
plt.plot(b, a3)
plt.title('sin(x)*cos(x)')
plt.show()
![enter image description here]()
Ответ 3
Для более тонкого управления вы можете использовать модуль subplot2grid
matplotlib.pyplot
.
http://matplotlib.org/users/gridspec.html
Ответ 4
Использование Gridspec для создания макетов подколонок с несколькими столбцами/строками показывает способ сделать это с помощью GridSpec
. Упрощенная версия примера с 3-мя участками будет выглядеть
import matplotlib.pyplot as plt
fig = plt.figure()
gs = fig.add_gridspec(2,2)
ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])
ax3 = fig.add_subplot(gs[1, :])
plt.show()
![enter image description here]()