Одинаково разнесенные участки Matplotlib Gridspec с учетом осей / меток / названий - PullRequest
0 голосов
/ 01 ноября 2018

Я использую matplotlib для создания панелей графиков качества публикации, и для меня важен точный интервал между осями, включая их текст. Gridspec и injlayout (h_pad, w_pad) хорошо работают, когда все мои графики имеют одинаковый размер шрифтов и содержат xlabel / ylabel (или нет). Однако, если на одном графике на панели есть метка xlabel, все графики в сеточной спецификации будут разнесены на это расстояние (максимальное расстояние между любыми двумя графиками, необходимое для достижения запрошенного пэда). Я хотел бы, чтобы участки располагались на одинаковом расстоянии друг от друга с учетом их текстов. Я обнаружил, что ограниченное расположение может иногда приводить к желаемому поведению, однако аргументы hspace и график управления wspace расходятся в трудно понимаемых единицах «доли размера подсплота», и я не разобрался, как установить wspace или hspace в производить и точные дюймы прокладки я хочу. (Я хочу, чтобы субплоты имели одинаковое расстояние между сюжетами / текстами, независимо от размеров фигуры или субплота, когда я делаю разные фигуры).

Мое единственное решение состояло в том, чтобы создать отдельные спецификации сетки для графиков с различными шаблонами маркировки (например, с или без xlabels) и разместить их на графиках, используя gs.tightlayout с аргументом rect, учитывая желаемый интервал. это также требует выравнивания спецификаций сетки и т. д.

Есть ли какое-либо известное решение для согласованных дюймов отступов между вспомогательными участками (включая текст)?

import matplotlib as mpl
import matplotlib.pyplot as plt

# equal spacing
fig =plt.figure(figsize=(4,8), constrained_layout=False)
gs = mpl.gridspec.GridSpec(3, 1, 
                       figure =fig,
                        height_ratios = [1,1,1,], hspace=0, wspace=0)

ax1 = fig.add_subplot(gs[0])
ax2 = fig.add_subplot(gs[1])
ax3 = fig.add_subplot(gs[2])

mpl.gridspec.rcParams['font.size'] = 72
# pad 1/4 an inch
gs.tight_layout(fig, h_pad=0.25, w_pad=0, pad = 0.25)

enter image description here

Неравный интервал

fig =plt.figure(figsize=(4,8), constrained_layout=False)
gs = mpl.gridspec.GridSpec(3, 1, 
                       figure =fig,
                        height_ratios = [1,1,1,], hspace=0, wspace=0)

ax1 = fig.add_subplot(gs[0])

ax2 = fig.add_subplot(gs[1])
ax3 = fig.add_subplot(gs[2])

ax2.set_xlabel('testing', fontsize = 20)
# setting this param so that I know how big the pad should be in inches (fonsize % units used for h_pad) 72 pt = 1 inch 
mpl.gridspec.rcParams['font.size'] = 72
# pad 1/4 an inch
gs.tight_layout(fig, h_pad=0.25, w_pad=0, pad = 0.25)

enter image description here

Желаемый вывод выглядит так enter image description here

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