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

Сетка состоит из 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()

Кроме того, вы все равно можете установить разные значения на 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()