将颜色条与数字对齐
Align colorbar with figures
我想在每一行的末尾绘制不同的颜色条,而不破坏图形的对齐方式。我能够添加颜色条,但它弄乱了图形的对齐方式。我已经尝试过使用受约束的布局,希望能保持对齐,但没有成功。附带一提,它在使用 add_axes
时工作得很好,但我发现它太粗暴了。
下面是情节的示例脚本:
crs = ccrs.PlateCarree()
fig, axarr = plt.subplots(nrows=5, ncols=6, figsize=(20, 13),
subplot_kw={'projection': crs})
axlist = axarr.flatten()
for ax in axlist:
plot_background(ax)
axlist[0].contourf(lon, lat, t1['tas1'].sel(month=1), cmap='temp6',
transform=ccrs.PlateCarree())
for i in np.arange(1,6):
axlist[i].contourf(lon, lat, t_b['tas'+str(i)].sel(month=1),10, cmap='temp6',
vmin=-6,vmax=5,transform=ccrs.PlateCarree())
for i, num in enumerate(np.arange(7,12)):
axlist[num].contourf(lon, lat, t1['tas'+str(i+1)].sel(month=1),10, cmap='temp6',
vmin=0.3,vmax=1.8,transform=ccrs.PlateCarree())
for i, num in enumerate(np.arange(13,18)):
axlist[num].contourf(lon, lat, t2['tas'+str(i+1)].sel(month=1), cmap='temp6',
vmin=0.3,vmax=1.8,transform=ccrs.PlateCarree())
for i, num in enumerate(np.arange(19,24)):
m = axlist[num].contourf(lon, lat, t3['tas'+str(i+1)].sel(month=1), cmap='temp6',
vmin=0.2,vmax=1.2,transform=ccrs.PlateCarree())
for i, num in enumerate(np.arange(25,30)):
axlist[num].contourf(lon, lat, t4['tas'+str(i+1)].sel(month=1), cmap='temp6',
vmin=0.4,vmax=3,transform=ccrs.PlateCarree())
fig.tight_layout(pad=0.0)
for j in np.arange(1,5):
fig.delaxes(axarr[j,0])
for i in (5,11,17,23,29):
plt.colorbar(cs1, ax=axlist[i],extend='both',orientation='vertical', aspect=10)
plt.show()
我通过添加以下内容解决了问题:
for i in (5,11,17,23,29):
pos1= axlist[i].get_position()
pos2 = [pos1.x0 + 0.27, pos1.y0, pos1.width / 30.0, pos1.height]
cax = fig.add_axes(np.array(pos2))
fig.colorbar(cs1, cax,extend='both',orientation='vertical',aspect=10)
将不得不更改 fig.colorbar
中的可映射标量,但是一旦我为不同的图设置了颜色限制以确保我添加了正确的颜色条范围,就可以很容易地通过循环来解决这个问题.
我想在每一行的末尾绘制不同的颜色条,而不破坏图形的对齐方式。我能够添加颜色条,但它弄乱了图形的对齐方式。我已经尝试过使用受约束的布局,希望能保持对齐,但没有成功。附带一提,它在使用 add_axes
时工作得很好,但我发现它太粗暴了。
下面是情节的示例脚本:
crs = ccrs.PlateCarree()
fig, axarr = plt.subplots(nrows=5, ncols=6, figsize=(20, 13),
subplot_kw={'projection': crs})
axlist = axarr.flatten()
for ax in axlist:
plot_background(ax)
axlist[0].contourf(lon, lat, t1['tas1'].sel(month=1), cmap='temp6',
transform=ccrs.PlateCarree())
for i in np.arange(1,6):
axlist[i].contourf(lon, lat, t_b['tas'+str(i)].sel(month=1),10, cmap='temp6',
vmin=-6,vmax=5,transform=ccrs.PlateCarree())
for i, num in enumerate(np.arange(7,12)):
axlist[num].contourf(lon, lat, t1['tas'+str(i+1)].sel(month=1),10, cmap='temp6',
vmin=0.3,vmax=1.8,transform=ccrs.PlateCarree())
for i, num in enumerate(np.arange(13,18)):
axlist[num].contourf(lon, lat, t2['tas'+str(i+1)].sel(month=1), cmap='temp6',
vmin=0.3,vmax=1.8,transform=ccrs.PlateCarree())
for i, num in enumerate(np.arange(19,24)):
m = axlist[num].contourf(lon, lat, t3['tas'+str(i+1)].sel(month=1), cmap='temp6',
vmin=0.2,vmax=1.2,transform=ccrs.PlateCarree())
for i, num in enumerate(np.arange(25,30)):
axlist[num].contourf(lon, lat, t4['tas'+str(i+1)].sel(month=1), cmap='temp6',
vmin=0.4,vmax=3,transform=ccrs.PlateCarree())
fig.tight_layout(pad=0.0)
for j in np.arange(1,5):
fig.delaxes(axarr[j,0])
for i in (5,11,17,23,29):
plt.colorbar(cs1, ax=axlist[i],extend='both',orientation='vertical', aspect=10)
plt.show()
我通过添加以下内容解决了问题:
for i in (5,11,17,23,29):
pos1= axlist[i].get_position()
pos2 = [pos1.x0 + 0.27, pos1.y0, pos1.width / 30.0, pos1.height]
cax = fig.add_axes(np.array(pos2))
fig.colorbar(cs1, cax,extend='both',orientation='vertical',aspect=10)
将不得不更改 fig.colorbar
中的可映射标量,但是一旦我为不同的图设置了颜色限制以确保我添加了正确的颜色条范围,就可以很容易地通过循环来解决这个问题.