为包含 MatPlotLib.Basemap 内容的两个子图设置图边框

Setting plot border frame for two subplot containing MatPlotLib.Basemap contents

作为说明,我在这里提供一个数字来描述我的问题。

fig = plt.figure(figsize = (10,4))
ax1 = plt.subplot(121)
map =Basemap(llcrnrlon=x_map1,llcrnrlat=y_map1,urcrnrlon=x_map2,urcrnrlat=y_map2)
map.readshapefile('shapefile','shapefile',zorder =2,linewidth = 0)
for info, shape in zip(map.shapefile, map.shapefile):
    x, y = zip(*shape) 
    map.plot(x, y, marker=None,color='k',linewidth = 0.5)
plt.title("a")
ax2 = plt.subplot(122)
y_pos = [0.5,1,]
performance = [484.0,1080.0]
bars = plt.bar(y_pos, performance, align='center')
plt.title("b")

由于映射设置与子图(b)不一致。因此,子图 (a) 和子图 (b) 具有不同的板框。在我看来,未对齐的边界对 reader 来说并不令人愉快。

有什么办法可以调整子图(b)的边界大小,使整个图形和谐。

这是我的目标:

Notice that, subplot(a) need to contain matplotlib.basemap elements.

目前,您左侧的子图具有 'equal' 宽高比,而另一个是自动的。因此,你必须手动设置右侧子图的纵横比:

def get_aspect(ax):
    xlim = ax.get_xlim()
    ylim = ax.get_ylim()
    aspect_ratio = abs((ylim[0]-ylim[1]) / (xlim[0]-xlim[1]))

    return aspect_ratio

ax2.set_aspect(get_aspect(ax1) / get_aspect(ax2))