nau*_*101 5 python matplotlib subplot matplotlib-basemap
以下代码生成我想要的图像,但颜色条为空白/白色,并且与数据不匹配:
def plot_array(da, ax=None, shift=True):
"""plots an array of lat by lon on a coastline map"""
m = basemap.Basemap()
m.drawcoastlines()
m.pcolormesh(da.lon, y=da.lat, data=da.T, latlon=True)
return m
# 'monthly mean' is an xarray DataArray
fig = plt.figure(0, (14, 8))
grid = ImageGrid(fig, 111, nrows_ncols=(3, 4), axes_pad=0.3,
cbar_mode='single', cbar_location="bottom",)
for i, m in enumerate(months):
plt.sca(grid[i])
plot_array(monthly_mean.sel(month=i + 1))
plt.title(m)
plt.suptitle("{b} - {y} monthly means".format(b=benchmark, y=year))
# plt.colorbar()
plt.tight_layout()
os.makedirs("plots/monthly_means/{y}".format(y=year), exist_ok=True)
plt.savefig("plots/monthly_means/{y}/{b}_{y}.png".format(b=benchmark, y=year))
plt.close()
Run Code Online (Sandbox Code Playgroud)
我还需要做些什么才能使颜色条与 ImageGrid 一起工作,还是 ImageGrid 和 Basemap 不能很好地协同工作?
据我了解,这不是底图问题。该ImageGrid()调用只是为颜色条设置一组空白轴,可以plt.colorbar()通过cax参数传递给它。默认情况下ImageGrid()有参数cbar_set_cax=True,它设置cax每个子图的属性。然后您可以将其传递给colorbar():
...
plt.colorbar(cax=grid[0].cax)
plt.tight_layout()
...
Run Code Online (Sandbox Code Playgroud)
这将仅使用当前活动的轴来确定颜色条数据范围,因此它只会与最终绘图保持一致。您将必须使用 的组合vmin/vmax来pcolormesh()确保所有绘图的一致性。