В принципе, вы можете просто сделать размер фигуры достаточно маленьким по ширине, чтобы он ограничивал ширину вспомогательных участков.Например, figsize=(2,7)
будет работать здесь.
Для автоматизированного решения вы можете настроить параметры подплота так, чтобы левый и правый поля ограничивали ширину подплота.Это показано в коде ниже.Предполагается, что имеется один ряд вспомогательных участков и что все изображения имеют одинаковый номер пикселя в горизонтальном направлении.
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(1,2)
im1 = ax[0].imshow(np.random.rand(30,4))
im2 = ax[1].imshow(np.random.rand(4,4))
def adjustw(images, wspace="auto"):
fig = images[0].axes.figure
if wspace=="auto":
wspace = fig.subplotpars.wspace
top = fig.subplotpars.top
bottom = fig.subplotpars.bottom
shapes = np.array([im.get_array().shape for im in images])
w,h = fig.get_size_inches()
imw = (top-bottom)*h/shapes[:,0].max()*shapes[0,1] #inch
n = len(shapes)
left = -((n+(n-1)*wspace)*imw/w - 1)/2.
right = 1.-left
fig.subplots_adjust(left=left, right=right, wspace=wspace)
adjustw([im1, im2], wspace=1)
plt.show()
Если вам нужно использовать tight_layout()
, сделайте это перед вызовом функции.Кроме того, тогда вам определенно необходимо установить единственный свободный параметр здесь, wspace
, отличный от "auto"
.wspace=1
означает, что между графиками должно быть столько же места, сколько и их ширина.
В результате получается фигура, в которой ширина участков имеет одинаковый размер.
