корректировка высоты отдельных участков в matplotlib в Python - PullRequest
12 голосов
/ 25 июля 2010

, если у меня есть серия вспомогательных участков с одним столбцом и несколькими строками, например:

plt.subplot(4, 1, 1) # first subplot
plt.subplot(4, 1, 2) # second subplot
# ...

как я могу настроить высоту первых N вспомогательных участков?Например, если у меня есть 4 вспомогательных участка, каждое в своем собственном ряду, я хочу, чтобы все они имели одинаковую ширину, но первые 3 вспомогательных участка были короче, то есть их оси Y были бы меньше и занимали меньше графика, чемось Y последнего графика в ряду.Как я могу это сделать?

спасибо.

Ответы [ 2 ]

20 голосов
/ 28 декабря 2012

Несмотря на то, что этот вопрос старый, я пытался ответить на очень похожий вопрос. @ Ссылка Джо на AxesGrid , была ответом на мой вопрос и имеет очень прямое использование, поэтому я хотел бы проиллюстрировать эту функциональность для полноты.

Функция AxesGrid предоставляет возможность создавать графики разного размера и размещать их очень точно, с помощью функции subplot2grid:

import matplotlib.pyplot as plt

ax1 = plt.subplot2grid((m, n), (row_1, col_1), colspan = width)
ax2 = plt.subplot2grid((m, n), (row_2, col_2), rowspan = height)

ax1.plot(...)
ax2.plot(...)

Обратите внимание, что максимальные значения для row_n, col_n равны m-1 и n-1 соответственно, так как используется нулевое индексирование.

Конкретно для решения вопроса, если бы было всего 5 субплотов, где последний субплот имеет в два раза больше высоты, чем остальные, мы могли бы использовать m=6.

ax1 = plt.subplot2grid((6, 1), (0, 0))
ax2 = plt.subplot2grid((6, 1), (1, 0))
ax3 = plt.subplot2grid((6, 1), (2, 0))
ax4 = plt.subplot2grid((6, 1), (3, 0))
ax5 = plt.subplot2grid((6, 1), (4, 0), rowspan=2)
plt.show()

Last Graph, twice the height

4 голосов
/ 27 июля 2010

Есть несколько способов сделать это.Самый простой (и наименее гибкий) способ - просто вызвать что-то вроде:

import matplotlib.pyplot as plt
plt.subplot(6,1,1)
plt.subplot(6,1,2)
plt.subplot(6,1,3)
plt.subplot(2,1,2)

, что даст вам что-то вроде этого: Unequal Subplots

Однако это не очень гибко,Если вы используете matplotlib> = 1.0.0, посмотрите на использование GridSpec .Это довольно приятно, и это гораздо более гибкий способ размещения участков.

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