专栏名称: 气象学家
【气象学家】公众号平台为您解读最新气象科研进展、分享气象实用编程技巧、追踪气象即时资讯。欢迎加入气象AI和Python交流群以及气象博士群!与5W+的专业人士一起交流互动!
目录
相关文章推荐
科幻世界SFW  ·  新刊速递 | ... ·  2 天前  
DataEye短剧观察  ·  DataEye短剧热力榜:6部短剧播放超3亿 ... ·  昨天  
DataEye短剧观察  ·  DataEye短剧热力榜:6部短剧播放超3亿 ... ·  昨天  
科幻世界SFW  ·  悼念向际纯:中国科幻绘画的开拓者 ·  3 天前  
河北青年报  ·  抖音、快手、微信同日宣布:下架! ·  3 天前  
51好读  ›  专栏  ›  气象学家

气象编程 | Python绘制高空环流及剖面图(文末附数据补充)

气象学家  · 公众号  ·  · 2024-06-05 15:53

正文

第一时间获取气象科研资讯

气象学家 公众号 交流群

加入

最近特别忙,以至于一直没有上公众号,今天看了一下私信,有不少朋友问及我此前关于绘制高空环流及剖面图的数据问题。主要问题集中在两个,一是我代码中import cal_time中的cal_time是什么,这是我写的一个计算时间相关问题的脚本,比如根据起止时间和时间间隔计算时间序列、根据已知时间和间隔计算目标时间、北京时和世界时相互换算等等,这是我在打包的时候忘记拷进去了,所以我这次会把数据补充进去;二是shp文件,我现在主要是利用meteva的绘制地图模块,所以很少会用到边界文件,这次的补充资料里,我也是拷的meteva包里面的shp文件,相对还比较准确。
下面就是利用Python绘制高空环流及剖面图的数据和代码简介啦:
我最近做了一些高空环流,以及lon-level, lat-level的剖面图绘制工作,总结成文写在公众号之后,后台很多朋友问能否提供数据下载。我想也是,纸上得来终觉浅,绝知此事要躬行,光看我这一堆代码解读,着实是隔靴搔痒,不如自己拿数据练练手的好。所以我把数据和代码整理了一下,让大家不用自己准备数据,直接就能跑起来看看绘图效果。
如果你下载之后,打开.py脚本,发现注释的中文部分都是乱码,就像这样:
请不要慌张!因为我都是在linux下跑的Python,它在Windows下打开有时就会出现乱码的情况,这个时候,只要拖到Linux下就可以正确显示啦:

还有一点,我这些脚本也都是在Linux下调试成功的,用Windows的话,大概率是跑不通的。
我整理的文件夹中包含以下几个文件:
具体的, upper_era.npy 、circulation.py和circulation.png分别是绘制高空环流图的ERA5数据、py脚本和出图效果。这里的绘图脚本中,我加了一个title_in_ax参数,可以设置子图标题在图内的情况,轻松应对不同期刊的各种需求~绘图效果如下:
202206010000.npy、draw_lonlat_level_time_ERA.py、ERA5_upper_level_jet.png则分别是绘制高空剖面图的ERA5纬向风数据、绘图脚本和出图结果。world_geo.nc则是全球海拔高度数据,用来绘制剖面图中的地形起伏情况,具体如何读取和使用,代码中都有详细介绍。绘图效果如下:
关于绘图,由于我们科学制图中,很少出现单独只出一张图的情况,更多的是多张子图拼接成一张大图,所以我这里的代码给出的都是绘制多张子图的情况。为了让我们的代码适配性更强,可以根据子图总数以循环的方式多次绘图,我在两个脚本中展示了两种调用子图的方法。
一种是直接以ax的变量名在循环中始终表示当前绘图目标,但是缺点就在于一旦出了循环,你就不能对此前绘制过的子图进行设置了,ax就始终只代表最后一个子图:
for i, ax in zip(range(4), axes.flat):        # 添加子图标题        ax.set_title(abc[i], fontsize=12, loc='left', pad=3)        # 设置y轴绘制范围        ax.set(ylim=(0,max(hgts)))......
还有一种是将每个子图都定义为全局变量,它的优势在于可以在循环结束之后,根据变量名反复进行调用:
for iax in range(self.z.shape[0]):    globals()['ax'+str(iax+1)] = fig.add_subplot(self.ax_para[0], self.ax_para[1], iax+1)    globals()['ax'+str(iax+1)].set_xlim([self.map_extend[0],self.map_extend[1]])    globals()['ax'+str(iax+1)].set_ylim([self.map_extend[2],self.map_extend[3]])......
绘制国界、省界方面,我建议就不要直接使用cartopy自带的地图文件了,他们暗搓搓地在我国地图边界搞了很多鬼。同时为了规避读取shapefile文件的麻烦,我建议大家可以使用meteva库自带的地图边界命令:
# 利用meteva库绘制河流、国界与省界add_china_map_2basemap(globals()['ax'+str(iax+1)], name="river", \                       edgecolor='k', lw=0.2, encoding='gbk', grid0=None)  # "河流"add_china_map_2basemap(globals()['ax'+str(iax+1)], name="nation", \                       edgecolor='k', lw=0.2, encoding='gbk', grid0=None)  # "国界"add_china_map_2basemap(globals()['ax'+str(iax+1)], name="province", \                       edgecolor='k', lw=0.2, encoding='gbk', grid0=None)  # "省界"
大致的介绍就先讲到这里吧。代码里面有很多详细的注释,大家可以自行观看,也可以参考以下几篇旧文:

如何用Python绘制经/纬度-高度剖面图

不用shapefile绘制环流及偏差图

如何用python绘制高空环流图

还有不明白的,欢迎留言讨论。没错, 我的公众号可以留言了嗷! 哈哈哈哈哈

百度网盘下载方法:

链接:https://pan.baidu.com/s/1LyCMyoGNGnVDvZtwef3Elw
提取码:zong





声明: 欢迎转载、转发。气象学家公众号转载信息旨在传播交流,其内容由作者负责,不代表本号观点。文中部分图片来源于网络,如涉及内容、版权和其他问题,请联系小编 (微信:qxxjgzh) 处理。


往期推荐
获取 ERA5/ERA5-Land再分析数据(36TB/32TB)
获取 全球 GPM降水数据,半小时/逐日(4TB)
获取1998-2019 TRMM 3B42逐日降水数据






请到「今天看啥」查看全文