Выровнять по вертикали два графика в matplotlib, если один из них является иллюстративным сюжетом?

Я хочу выровнять ось x двух графиков, если один из них является imshow .

Я попытался использовать gridspec поскольку это следует:

 import matplotlib.pyplot as plt import numpy as np import matplotlib.gridspec as grd v1 = np.random.rand(50,150) v2 = np.random.rand(150) fig = plt.figure() gs = grd.GridSpec(2,1,height_ratios=[1,10],wspace=0) ax = plt.subplot(gs[1]) p = ax.imshow(v1,interpolation='nearest') cb = plt.colorbar(p,shrink=0.5) plt.xlabel('Day') plt.ylabel('Depth') cb.set_label('RWU') plt.xlim(1,140) #Plot 2 ax2 = plt.subplot(gs[0]) ax2.spines['right'].set_visible(False) ax2.spines['top'].set_visible(False) ax2.xaxis.set_ticks_position('bottom') ax2.yaxis.set_ticks_position('left') x=np.arange(1,151,1) ax2.plot(x,v2,'k',lw=0.5) plt.xlim(1,140) plt.ylim(0,1.1) # plt.savefig("ex.pdf", bbox_inches='tight') 

Я также хочу, чтобы сюжеты были как можно ближе друг к другу, а один – к другой. Если я возьму цветную панель, они, похоже, выровнены, но все же я не могу поставить их близко друг к другу. Я также хочу, чтобы цветная панель тоже была.

    Изображение не заполняет пространство, потому что соотношение сторон рисунка отличается от оси. Один из вариантов – изменить соотношение сторон вашего изображения. Вы можете поддерживать выравнивание изображения и линейного графика с помощью двух-двух сетки и помещать цветную полосу в свою собственную ось.

     import matplotlib.pyplot as plt import numpy as np import matplotlib.gridspec as grd v1 = np.random.rand(50,150) v2 = np.random.rand(150) fig = plt.figure() # create a 2 X 2 grid gs = grd.GridSpec(2, 2, height_ratios=[1,10], width_ratios=[6,1], wspace=0.1) # image plot ax = plt.subplot(gs[2]) p = ax.imshow(v1,interpolation='nearest',aspect='auto') # set the aspect ratio to auto to fill the space. plt.xlabel('Day') plt.ylabel('Depth') plt.xlim(1,140) # color bar in it's own axis colorAx = plt.subplot(gs[3]) cb = plt.colorbar(p, cax = colorAx) cb.set_label('RWU') # line plot ax2 = plt.subplot(gs[0]) ax2.spines['right'].set_visible(False) ax2.spines['top'].set_visible(False) ax2.xaxis.set_ticks_position('bottom') ax2.yaxis.set_ticks_position('left') ax2.set_yticks([0,1]) x=np.arange(1,151,1) ax2.plot(x,v2,'k',lw=0.5) plt.xlim(1,140) plt.ylim(0,1.1) plt.show() 

    выровненное изображение и линейный график с цветовой полосой