千家信息网

用python怎么实现多子图共享色标

发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,本篇内容介绍了"用python怎么实现多子图共享色标"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!用
千家信息网最后更新 2024年11月24日用python怎么实现多子图共享色标

本篇内容介绍了"用python怎么实现多子图共享色标"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

用EAR5 hourly data on pressure levels from 1979 to present的再分析资料,绘制了200hPa、500hPa、700hPa和850hPa的相对湿度和风场。

首先,我们要新建一个大的画布,设置好它的大小和分辨率:

fig = plt.figure(figsize=(12,8),dpi=150)

我们需要画同一时刻四个不同层次,因此我们在这个大画布里设置四个子图,给它们各自起一个名字:

ax1 = plt.subplot(221, projection = proj)
ax2 = plt.subplot(222, projection = proj)
ax3 = plt.subplot(223, projection = proj)
ax4 = plt.subplot(224, projection = proj)

(这里没有用subplots()是因为它好像不支持ccrs.PlateCarree()的投影方式,我就只能这样来做了。而且不能用这个新建子图的方式也让我没办法令子图共用坐标轴,不知道具体是哪里出了问题。。。)

但是,在调用函数的时候,当然还是名字都一样好写一点咯~只画4层情况的话,我使用了range来控制读取的层次,那么,如何将有规律的名字字符串转换为变量的名字,再传入自定义函数中呢?我使用了locals()来达成目的。

for lev in range(0,4):
r = obj['r'][0][lev][:][:]
u = obj['u'][0][lev][:][:]
v = obj['v'][0][lev][:][:]

the_string = f'ax{lev+1}'
ax = locals()[the_string]

ac = RHLevel(r, u, v, ax, lev)

为什么要令函数等于"ac"呢?由于四张图片所使用的填色规则都是一样的,为了看起来顺眼,只需要一条colorbar作为图例会好很多。所以,我们可以将画相对湿度的语句传出,在循环的外部利用该信息绘制整张图的colorbar。

def RHLevel(r, u, v, ax, lev):
......
ac = ax.contourf(lons[248:288,420:480],lats[248:288,420:480],r[248:288,420:480],levels=np.arange(60,110,10),
cmap='Greens',extend='both', alpha=0.9)
return ac

由于返回了ac的信息,所以在调用函数之后该函数是有一个"结果"的,可以为这个结果"起名",这样就可以在循环外用传递出来的结果来自定义colorbar了:

ac = RHLevel(r, u, v, ax, lev)
cb = fig.colorbar(ac, cax = cbar_ax,orientation='horizontal',spacing='proportional')

然后,就可以利用colorbar指令来定义它的位置、方向了,在这里,l, b, w, h分别是指该colorbar的左侧起始点、下侧起始点、宽度和高度,数字则是百分比,比如说0.25是指大画布的宽的0.25倍:

l,b,w,h = 0.25, 0.05, 0.5, 0.02
rect = [l,b,w,h]
cbar_ax = fig.add_axes(rect)
cb = fig.colorbar(ac, cax = cbar_ax,orientation='horizontal',spacing='proportional')

为了标出不同图片所对应的层次,我们可以在函数中就给每一个子图设置一个小标题。loc=''可以设置该标题的对齐位置,在这里标题向左对齐。

    ax.set_title(f'{level[lev]}hPa',fontsize=12,loc='left')

在大图(循环外)中设置整张图的标题(和子图标题不一样噢),具体有什么区别可以搜一下fig/ax/plt的区别,有不少文章都讲得很详细:

plt.suptitle(f'2020年5月21日00时(世界时)各层相对湿度与风场',fontsize=18)

"用python怎么实现多子图共享色标"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0