为包含 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))
作为说明,我在这里提供一个数字来描述我的问题。
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))