рассчитать пространство в сетке c с указанным отношением ширины - PullRequest
0 голосов
/ 18 марта 2020

Я хочу вычислить wspace для пользовательской настройки вспомогательных участков, указанных gridspec, чтобы, например, поместить текст между двумя вспомогательными участками, не перекрывая их осями. Согласно do c, wspace - это

величина ширины, зарезервированная для пространства между вспомогательными участками, выраженная в виде доли от средней ширины оси.

Таким образом, его можно рассчитать как (ax1_pos.x0 - ax0_pos.x1) / (ax1_pos.x1 - ax1_pos.x0), как было указано здесь . Однако, когда я применил width_ratios параметры в gridspec, вычисленный wspace не согласуется с назначенным wspace и кажется пропорциональным отношению. Любая подсказка о корректировке wspace на width_ratios?

fig = plt.figure(figsize=(10, 6))
gs = gridspec.GridSpec(ncols=2, nrows=30, wspace=0.5)
gs1_pos = gs[:, 1].get_position(fig)
gs0_pos = gs[:, 0].get_position(fig)
ax0 = fig.add_subplot(gs[:, 0])
ax1 = fig.add_subplot(gs[:, 1])
print("Grids 0 position")
print(gs0_pos)
print("Grids 1 position")
print(gs1_pos)
print('space between figures represented as a fraction of axis width')
print((gs1_pos.x0 - gs0_pos.x1) / (gs1_pos.x1 - gs1_pos.x0))
# return 0.5

Но однажды применив width_ratio, затем

fig = plt.figure(figsize=(10, 6))
gs = gridspec.GridSpec(ncols=2, nrows=30, width_ratios=[1, 4], wspace=0.5)
gs1_pos = gs[:, 1].get_position(fig)
gs0_pos = gs[:, 0].get_position(fig)
ax0 = fig.add_subplot(gs[:, 0])
ax1 = fig.add_subplot(gs[:, 1])
print("Grids 0 position")
print(gs0_pos)
print("Grids 1 position")
print(gs1_pos)
print('space between figures represented as a fraction of axis width')
print((gs1_pos.x0 - gs0_pos.x1) / (gs1_pos.x1 - gs1_pos.x0))
# return 0.3125

1 Ответ

0 голосов
/ 19 марта 2020

Несмотря на то, что до сих пор не понял, как matplotlib вычисляет wspace в моем случае, существует коэффициент, пропорциональный установленному соотношению, так что коррекция может быть достигнута. Я обнаружил, что коэффициент для разных крыс ios составляет

f = 1 для 1: 1

f = 0,75 для 1: 2

f = 2 / 3 для 1: 3

f = 0,625 для 1: 4

......

Эти коэффициенты можно получить, установив wspace в 0.1.

fig = plt.figure(figsize=(10, 6))
for r in range(1, 10):
    gs = gridspec.GridSpec(ncols=2, nrows=30, width_ratios=[1, r])
    gs.update(wspace=0.1)
    gs1_pos = gs[:, 1].get_position(fig)
    gs0_pos = gs[:, 0].get_position(fig)
    ax0 = fig.add_subplot(gs[:, 0])
    ax1 = fig.add_subplot(gs[:, 1])
    print('space between figures represented as a fraction of axis width')
    print(round((gs1_pos.x0 - gs0_pos.x1) / (gs1_pos.x1 - gs1_pos.x0) * 10, 4))

Затем исправьте дробь, чтобы получить набор wspace путем деления множителя

fig = plt.figure(figsize=(10, 6))
# factors for ratios 1 to 9
factors = [1, 0.75, 0.667, 0.625, 0.6, 0.583, 0.571, 0.562, 0.556]
for r in range(1, 10):
    gs = gridspec.GridSpec(ncols=2, nrows=30, width_ratios=[1, r], wspace=0.6)
    gs1_pos = gs[:, 1].get_position(fig)
    gs0_pos = gs[:, 0].get_position(fig)
    ax0 = fig.add_subplot(gs[:, 0])
    ax1 = fig.add_subplot(gs[:, 1])
    print(round((gs1_pos.x0 - gs0_pos.x1) / (gs1_pos.x1 - gs1_pos.x0) / factors[r-1], 4))

Получает

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