Как полностью настроить размер подзаговора в matplotlib - PullRequest
0 голосов
/ 28 сентября 2018

Я хочу иметь два вспомогательных сюжета на рисунке matplotlib, которые имеют размеры и расположены относительно друг друга, как в примере ниже (по стилистическим соображениям).Все примеры, которые я видел для настройки размещения и размеров подзаговоров, по-прежнему выкладываются и занимают всю площадь фигуры.Что я могу сделать, чтобы расположить самый правый участок с таким пробелом, как показано ниже?

enter image description here

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

- РЕДАКТИРОВАТЬ: Этот ответ в конечном итоге поразительно похож на ответ, данный @ImportanceOfBeingErnest, но использует подход к управлению макетом в дюймах, а не в дробных единицах.-

Это помогает, если вы добавляете в сетку gridspec, а затем заполняете сетку, используя желаемые интервалы отношений или столбцов.Для многих рисунков, которые я делаю, мне нужно, чтобы они хорошо помещались на странице, поэтому я довольно часто использую этот шаблон, чтобы дать мне контроль сетки до десятых долей дюйма.

import matplotlib.pyplot as plt
from matplotlib import gridspec

fig = plt.figure(figsize=(7, 5)) # 7 inches wide, 5 inches tall
row = int(fig.get_figheight() * 10)
col = int(fig.get_figwidth() * 10)
gsfig = gridspec.GridSpec(
    row, col, 
    left=0, right=1, bottom=0,
    top=1, wspace=0, hspace=0)

gs1 = gsfig[:, 0:30] 
# these spans are in tenths of an inch, so left-right 
# spans from col 0 to column 30 (or 3 inches)

ax1 = fig.add_subplot(gs1)

gs1 = gsfig[20:40, 35:70] # again these spans are in tenths of an inch
ax1 = fig.add_subplot(gs1)

gridspec layout with one-tenth inch grid

0 голосов
/ 28 сентября 2018

Вам необходимо представить некоторую (виртуальную) сетку, на которой размещены подзаговоры.

enter image description here

Сетка состоит из 3 строк и 2 столбцов.Первый подзаговор охватывает все три строки и первый столбец.Второй подзаговор охватывает только второй ряд второго столбца.Соотношения между размерами строк и столбцов не обязательно равны.

import matplotlib.pyplot as plt
import matplotlib.gridspec

gs = matplotlib.gridspec.GridSpec(3,2, width_ratios=[1,1.4], 
                                       height_ratios=[1,3,1])

fig = plt.figure()
ax1 = fig.add_subplot(gs[:,0])
ax2 = fig.add_subplot(gs[1,1])

plt.show()

enter image description here

Кроме того, вы все равно можете установить разные значения на hspace иwspace параметры.

Хороший обзор дается в учебнике GridSpec .


Поскольку это было упомянуто в комментариях: Если абсолютное позиционирование в единицахдюймы могут быть желательны, я бы порекомендовал непосредственно добавить оси нужного размера,
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
w,h = fig.get_size_inches()
div = np.array([w,h,w,h])

# define axes in by rectangle [left, bottom, width, height], numbers in inches
ax1 = fig.add_axes(np.array([.7, .7, 1.8, 3.4])/div)
ax2 = fig.add_axes(np.array([3, 1.4, 3, 2])/div)

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