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

Как сделать оси занимают несколько подзаговоров с помощью pyplot (Python)

Я хотел бы иметь три сюжета в одной фигуре. Эта цифра должна иметь макет подзаголовка два на два, где первый график должен занимать первые две ячейки подзаголовка (т.е. Весь первый ряд ячеек графика), а другие графики должны быть расположены под первым в ячейках 3 и 4. Я знаю, что Matlab позволяет это, используя команду subplot так

subplot(2,2,[1,2]) % the plot will span subplots 1 and 2

Возможно ли также, что в pyplot одна ось занимает более одного подзаголовка? Докшрин из pyplot.subplot не говорит об этом.

Кто-нибудь получил легкое решение? Спасибо заранее

4b9b3361

Ответ 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

Ответ 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