Несмотря на то, что до сих пор не понял, как 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