Как сделать так, чтобы оси занимали несколько участков с Pyplot (Python) - PullRequest
32 голосов
/ 15 февраля 2010

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

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

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

Кто-нибудь получил простое решение? Заранее спасибо

Ответы [ 4 ]

43 голосов
/ 15 февраля 2010

Вы можете просто сделать:

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))

Т.е., первый график действительно является графиком в верхней половине (рисунок разделен только на 2 * 1 = 2 ячейки), а следующие два меньших графика выполнены в сетке 2 * 2 = 4 ячейки. Третий аргумент subplot() - это положение графика внутри сетки: например, во втором вспомогательном участке (subplot(2, 2, 3)) оси перейдут в третью часть матрицы 2 * 2, т.е. в левый нижний угол.

31 голосов
/ 14 мая 2013

Чтобы иметь несколько дочерних участков с занимаемой осью, вы можете просто сделать:

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

11 голосов
/ 15 июля 2014

Для более точного управления вы можете использовать модуль subplot2grid matplotlib.pyplot.

http://matplotlib.org/users/gridspec.html

2 голосов
/ 25 апреля 2019

Использование 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...