最近特别忙,以至于一直没有上公众号,今天看了一下私信,有不少朋友问及我此前关于绘制高空环流及剖面图的数据问题。主要问题集中在两个,一是我代码中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
声明:
欢迎转载、转发。气象学家公众号转载信息旨在传播交流,其内容由作者负责,不代表本号观点。文中部分图片来源于网络,如涉及内容、版权和其他问题,请联系小编
(微信:qxxjgzh)
处理。