Python气象实例——浅要绘制台风生成环境场

07-11 1649阅读

Python气象实例——浅要绘制台风生成环境场

A3.浅要绘制台风生成环境场

● 绘制海表面温度情况

● 绘制中层湿度

● 绘制流场和相对涡度

● 绘制垂直风切变

实例三

● 本次使用个例为2023年第5号台风“杜苏芮”,利用2023年7月20日08时的气象场(包含海表面温度,中层湿度,垂直风切变,绝对涡度)浅要分析台风生成大环境背景的情形

# 引入处理数据需要的库
import xarray as xr
import numpy as np
# 打开对应的数据集,本例所用的数据是EAR5的数据
dt1 = xr.open_dataset('/home/chenzixuan0811/pycode/tc_code/天缘气遇投稿/投稿2/23072008_sst.nc')  # 打开海温数据集
dt2 = xr.open_dataset('/home/chenzixuan0811/pycode/tc_code/天缘气遇投稿/投稿2/23072008_wind.nc')  # 打开风速数据集
dt3 = xr.open_dataset('/home/chenzixuan0811/pycode/tc_code/天缘气遇投稿/投稿2/23072008_vo.nc')  # 打开相对涡度数据集
dt4 = xr.open_dataset('/home/chenzixuan0811/pycode/tc_code/天缘气遇投稿/投稿2/23072008_rh600.nc')  # 打开600hPa相对湿度数据集
# 进行生成条件分析中,使用变量
sst = dt1.sst[0,:,:].values - 275.15  # 获取海表温度数据,并将单位转换为℃
rh = dt4.r[0,:,:].values / 100  # 获取600hPa相对湿度数据,并将单位转换为百分比
vo = dt3.vo[0,:,:].values * 10**5  # 获取相对涡度数据,并将单位转换为10^5 1/s
U850 = dt2.u[0,1,:,:].values  # 获取850hPa风速数据
V850 = dt2.v[0,1,:,:].values  # 获取850hPa风速数据
U200 = dt2.u[0,0,:,:].values  # 获取200hPa风速数据
V200 = dt2.v[0,0,:,:].values  # 获取200hPa风速数据
# 计算风切变
WINDshear = np.sqrt((U200 - U850)**2 + (V850 - V200)**2)
lons = dt1.longitude.values  # 获取经度数据
lats = dt1.latitude.values  # 获取纬度数据
X1, Y1 = np.meshgrid(lons, lats)  # 生成经纬度网格,为后面画流场做准备
# 关闭数据集
dt1.close()
dt2.close()
dt3.close()
dt4.close()
#完成数据处理部分以后,开启画图部分,引入我们所用到的库
import matplotlib.pyplot as plt
import matplotlib as mpl
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
import cartopy.feature as cfeat
import cartopy.mpl.ticker as cticker
# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus'] = False
# 创建一个函数用于绘制对应图片
#对应传入参数是绘图数据(data),色标数值(levels),色标颜色(cmap),图片名称(title),图片存储的名字(filename),是否为超出范围的值设置尖端
def plot_map_data(data, levels, cmap, title, filename, extend='neither'):
    # 创建一个图形对象和坐标轴对象
    fig = plt.figure(figsize=(8, 8), dpi=300)
    #使用fig.add_axes,要记住rect四个参数的含义,四个值分别是左边界、下边界、宽度和高度,取值范围为 0 到 1
    #如例子里面[0.1, 0.1, 0.8, 0.8] 表示左下角位置为 (0.1, 0.1),宽度和高度为整个图形宽度和高度的80%
    ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], projection=ccrs.PlateCarree())
    # 设置对应的显示范围
    leftlon, rightlon, lowerlat, upperlat = (100, 160, 0, 40)
    ax.set_extent([leftlon, rightlon, lowerlat, upperlat], crs=ccrs.PlateCarree())
    # x, y坐标轴设置
    lon_formatter = cticker.LongitudeFormatter()
    lat_formatter = cticker.LatitudeFormatter()
    ax.set_xticks(np.arange(100, 160 + 10, 10), crs=ccrs.PlateCarree())
    ax.set_yticks(np.arange(0, 40 + 10, 10), crs=ccrs.PlateCarree())
    ax.xaxis.set_major_formatter(lon_formatter)
    ax.yaxis.set_major_formatter(lat_formatter)
    # 显示海岸线、海洋、陆地
    ax.add_feature(cfeature.COASTLINE)
    # 绘制等值填充图
    c = ax.contourf(lons, lats, data, levels=levels, transform=ccrs.PlateCarree(), cmap=cmap, extend=extend)
    # 添加颜色条
    position = fig.add_axes([0.1, 0.12, 0.8, 0.02])
    cbar = fig.colorbar(c, cax=position, orientation='horizontal', drawedges=True)
    # 设置标题
    ax.set_title(title, fontsize=20, loc='center', pad=20)
    # 保存图形,bbox_inches用于指定要保存的图形的边界框,一般我们使用bbox_inches='tight'自动调整边界框,删除多余的空白区域,使得保存的图形更紧凑
    plt.savefig(filename, dpi=300, bbox_inches='tight')
   
# 绘制海表温度图,并保存为文件
plot_map_data(sst, np.arange(25, 30, 1), 'OrRd', '23072008_sst', 'output_sst.png',extend='max')
# 绘制相对湿度图,并保存为文件
plot_map_data(rh, np.arange(0.4, 1.2, 0.2), 'Blues', '23072008_rh600', 'output_rh.png')
# 绘制涡度和流场图,并保存为文件
fig = plt.figure(figsize=(8, 8), dpi=300)
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], projection=ccrs.PlateCarree())
ax.add_feature(cfeature.COASTLINE, color='gray')
c = ax.contourf(lons, lats, vo, levels=np.arange(0, 12, 2), transform=ccrs.PlateCarree(), cmap='OrRd', extend='max')
#绘制流线(在低纬度常看流场)
#关于streamplot函数,这里的X1,Y1表示网格的x和y坐标,通常是使用numpy.meshgrid函数生成的网格坐标
#U850, V850表示在每个网格点上的x和y方向上的速度分量,density,linewidth,arrowsize,color为可选参数
#在python中输入help(plt.streamplot),就可以查看streamplot这一函数的用法,其中包括可选函数等的详细说明,在遇到不太明白的函数时,选择使用help()来来查看函数的帮助文档
plt.streamplot(X1, Y1, U850, V850, density=3, linewidth=0.4, arrowsize=0.5, color='k')
position = fig.add_axes([0.1, 0.12, 0.8, 0.02])
cbar = fig.colorbar(c, cax=position, orientation='horizontal', drawedges=True)
ax.set_title('23072008_vo', fontsize=20, loc='center', pad=20)
plt.savefig('output_vo.png', dpi=300, bbox_inches='tight')
# 绘制风切变图,并保存为文件
plot_map_data(WINDshear, np.arange(0, 12, 2), 'OrRd_r', '23072008_windshear', 'output_windshear.png')

Python气象实例——浅要绘制台风生成环境场

海表面温度

海表面温度控制着海洋向台风输入的热通量,一般认为台风生成时海温需要大于 26.5ºC。本次台风生成源地位于西太平洋暖池,海温高于26.5℃。

Python气象实例——浅要绘制台风生成环境场

600hPa中层湿度

中层湿度能够为台风是发生发展提供充足的水汽条件,水汽在上升过程中释放凝结潜热,有助于台风眼墙的建立。

Python气象实例——浅要绘制台风生成环境场

所示为805hPa流场,填色部分为850hPa相对涡度

初始扰动是台风生成的重要条件,在台风生成之际,西太平洋暖池位置已经存在台风胚胎。

Python气象实例——浅要绘制台风生成环境场

环境风垂直切变

环境风垂直切变是影响热带气旋强度变化的重要环境条件之一,垂直风切变较弱情况下,有利于波动稳定、能量的积累以及台风暖心结构的形成。研究表明,使台风增强或减弱的风切变阈值约为 10 m / s,当环境风垂直切变小于10 m / s 时,有利于台风强度的增强,反之则会使台风强度减弱。在此次“杜苏芮”台风生成源地,存在着较弱的垂直风切变。

Python气象实例——浅要绘制台风生成环境场


关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

Python气象实例——浅要绘制台风生成环境场

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

Python气象实例——浅要绘制台风生成环境场

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

Python气象实例——浅要绘制台风生成环境场

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

Python气象实例——浅要绘制台风生成环境场

Python气象实例——浅要绘制台风生成环境场

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

Python气象实例——浅要绘制台风生成环境场

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取【保证100%免费】

Python气象实例——浅要绘制台风生成环境场
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]