Я думаю, что самый простой способ - использовать aspect='auto'
с ax[1].imshow(z)
.Но это приведет к искажению изображения, которое может отличаться от того, что вы показали в вопросе.И это может не сработать в тех случаях, когда нет единого n
.Я не уверен, что получил 100%, но позвольте мне попробовать этот метод.Ключевая идея здесь:
- Изменить соотношение сторон вашего
fig
.Точное соотношение зависит как от данных вашего изображения, так и от макета вашего вспомогательного участка. - Используйте плотный макет для устранения ненужных между осями, которые могут немного сместить ваш график.
Вот мой примеркод и рисунок:
import matplotlib.pyplot as plt
from matplotlib.figure import figaspect
import numpy as np
n = 10
x = np.random.rand(n,1)
y = np.random.rand(1,n)
z = np.random.rand(n,n)
width_max = max(s.shape[0] for s in [x, y, z])
height_max = max(s.shape[1] for s in [x, y, z])
row = 1
col = 3
fig, ax = plt.subplots(row, col)
w, h = figaspect(row*width_max/(col*height_max))
fig.set_size_inches(w, h)
ax[0].imshow(x)
ax[1].imshow(z)
ax[2].imshow(y)
plt.tight_layout()
plt.show()
Надеюсь, это решит вашу реальную проблему.Я думаю, что это также работает для случая, как:
x = np.random.rand(3,1)
y = np.random.rand(1,10)
z = np.random.rand(7,6)