Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >可视化 | 台风方位角平均的半径-气压剖面图

可视化 | 台风方位角平均的半径-气压剖面图

作者头像
郭好奇同学
发布于 2022-11-15 01:18:54
发布于 2022-11-15 01:18:54
1.7K10
代码可运行
举报
文章被收录于专栏:好奇心Log好奇心Log
运行总次数:0
代码可运行

以下全文代码和数据均已发布至和鲸社区,复制下面链接前往,可一键fork跑通:

https://www.heywhale.com/mw/project/631aad2b8e6d2ee0a86a7f0a

前面的项目使用metpy将台风数据插值转换为极坐标系中,介绍了如何利用metpy完成将台风数据从笛卡尔坐标系转化成极坐标系的插值操作。

利用插值后的数据进行方位角平均,计算径向风和切向风,对多层数据进行计算后,可以得到方位角平均的半径-气压剖面图。

导入相关库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from scipy import interpolate
import metpy.calc as mpcalc  
from metpy.units import units  
import xarray as xr   
import numpy as np 
import matplotlib.pyplot as plt
import matplotlib as mpl
# mpl.rcParams['font.sans-serif'] = ['Times New Roman']#设置默认字体
mpl.rcParams['font.size'] = '14' # 设置字体大小
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Warning: ecCodes 2.21.0 or higher is recommended. You are running version 2.14.1

数据读取

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f = '/home/mw/input/nc_sample3575/data_example.nc'
#CMA给出的台风中心
lon_t=128.9
lat_t=20.0

#nc数据读取
ds = xr.open_dataset(f)
lat = ds.latitude
lon = ds.longitude
levels = ds.level

极坐标系插值转换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 #azimuths是极坐标系中的角度,ranges是半径,可以根据自己需要设置
azimuths = np.linspace(0,360,73)*units.degree
ranges = np.linspace(0,1000,101)*1000*units.meter 
vt_am = np.zeros((len(levels),len(ranges)))
vr_am = np.zeros((len(levels),len(ranges)))

#利用850hPa的相对涡度寻找再分析资料中的台风中心
lon_range = lon[(lon>=lon_t-2) & (lon<=lon_t+2)]
lat_range = lat[(lat>=lat_t-2) & (lat<+lat_t+2)]
vo = ds.vo.sel(level=850, longitude=lon_range, latitude=lat_range)

for m in lat_range:
    for n in lon_range:
        if vo.sel(longitude=n, latitude=m) == np.max(vo):
            lat_v = m
            lon_v = n

#利用metpy库可以十分便捷的得到插值后的经纬度坐标
lon_a,lat_a = mpcalc.azimuth_range_to_lat_lon(azimuths,ranges,lon_v,lat_v)

#因为ERA5的数据分辨率是0.25°,为了保证插值后不产生NAN,边界上各扩大一个格点
lons = lon[(lon>=lon_a.min()-0.25) & (lon<=lon_a.max()+0.25)] 
lats = lat[(lat>=lat_a.min()-0.25) & (lat<=lat_a.max()+0.25)]
lon_s,lat_s = np.meshgrid(lons,lats)

插值&计算切向风、径向风

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#构造插值前后的格点矩阵
grid_in = np.concatenate([lon_s.reshape(-1,1), lat_s.reshape(-1,1)], axis=1)
grid_out = np.concatenate([lon_a.reshape(-1,1), lat_a.reshape(-1,1)], axis=1)

for j in range(0,len(levels)):
    u_in = ds['u'].sel(level= levels[j], longitude=lons, latitude=lats)
    v_in = ds['v'].sel(level= levels[j], longitude=lons, latitude=lats)
    u_out = interpolate.griddata(grid_in, np.array(u_in).flatten(), grid_out, method='cubic')
    v_out = interpolate.griddata(grid_in, np.array(v_in).flatten(), grid_out, method='cubic')
    u_out = u_out.reshape((len(azimuths),len(ranges)))
    v_out = v_out.reshape((len(azimuths),len(ranges)))

    #计算切向风、径向风
    vt = np.zeros((len(azimuths),len(ranges)))
    vr = np.zeros((len(azimuths),len(ranges)))

    for k in range(0,len(azimuths)):
        vt[k,:] = v_out[k,:]*np.cos(azimuths[k]*np.pi/180)-u_out[k,:]*np.sin(azimuths[k]*np.pi/180)
        vr[k,:] = u_out[k,:]*np.cos(azimuths[k]*np.pi/180)+v_out[k,:]*np.sin(azimuths[k]*np.pi/180)
    #计算方位角平均
    vt_am[j,:] = np.mean(vt,axis=0)
    vr_am[j,:] = np.mean(vr,axis=0)

可视化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#为了图形美观,做29点平滑
vt_am = mpcalc.smooth_n_point(vt_am,9,2) 
vr_am = mpcalc.smooth_n_point(vr_am,9,2) 

#画图
plt.figure(1, figsize=(13., 5.))

ax1 = plt.subplot(121) 
ax1.invert_yaxis() 
ax1.set_yscale('symlog')
ax1.set_yticks([1000,850,700,500,400,300,200,150,100,50])
ax1.set_yticklabels([1000,850,700,500,400,300,200,150,100,50])        
ax1.set_xticks(range(0,1200000,200000))
ax1.set_xticklabels(range(0,12,2))
ax1.set_ylabel('Pressure (hPa)')
ax1.set_xlabel('Radius (100km)')
ax1.set_title('tangential wind')
fig1 = ax1.contourf(ranges, levels, vt_am, 
                    np.arange(-10,12,2),
                    cmap='bwr',
                    extend='both')
plt.colorbar(fig1,orientation='vertical',shrink=0.75)

ax2 = plt.subplot(122) 
ax2.invert_yaxis() 
ax2.set_yscale('symlog')
ax2.set_yticks([1000,850,700,500,400,300,200,150,100,50])
ax2.set_yticklabels([1000,850,700,500,400,300,200,150,100,50])        
ax2.set_xticks(range(0,1200000,200000))
ax2.set_xticklabels(range(0,12,2))
ax2.set_ylabel('Pressure (hPa)')
ax2.set_xlabel('Radius (100km)')
ax2.set_title('radial wind')
fig2 = ax2.contourf(ranges, levels, vr_am, 
                    np.arange(-10,12,2),
                    cmap='bwr',
                    extend='both')
plt.colorbar(fig2,orientation='vertical',shrink=0.75)
    
plt.show()   

这两张图可以清楚的给出台风切向风与径向风的垂直分布特征。

本篇内容来自技术大佬金茹投稿

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 好奇心Log 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
你好,可以出一期处理台风模拟wrfout数据的方位角平均的半径-xx剖面图嘛,因为wrfout数据处理和nc在切片那里有差别,谢谢你
你好,可以出一期处理台风模拟wrfout数据的方位角平均的半径-xx剖面图嘛,因为wrfout数据处理和nc在切片那里有差别,谢谢你
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
使用metpy将台风数据插值转换为极坐标系
研究台风的同学们应该都接触过需要计算以台风为中心的方位角平均物理量,这就需要将笛卡尔坐标系中的数据插值到极坐标系,再对各个方位角的数据进行平均。
郭好奇同学
2022/11/15
2.4K0
使用metpy将台风数据插值转换为极坐标系
读者答疑 | python怎么计算流函数
由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
用户11172986
2024/08/29
3410
读者答疑 | python怎么计算流函数
大气视热源的python计算尝试
大气视热源是常用于表征大气热力作用的概念,本项目会尝试使用metpy库计算大气视热源并可视化,希望能给你们一些微小的帮助。
用户11172986
2024/06/20
3650
大气视热源的python计算尝试
时间剖面图?so easy
在本文中,我们将利用WRFOUT数据进行处理和分析,并生成直观明了的时间剖面图。你将能够清楚地看到水汽通量散度随着时间和高度的变化趋势,从而更好地理解大气中水汽的传播与运动机制
用户11172986
2024/06/20
2130
时间剖面图?so easy
基于WRFOUT计算相对涡度,绝对涡度,位涡并可视化
版本:python3.7 数据:wrfout模拟数据 核心代码:metpy.calc.vorticity
用户11172986
2024/06/20
7600
基于WRFOUT计算相对涡度,绝对涡度,位涡并可视化
计算整层水汽通量散度是先积分后散度还是先散度后积分?
由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
用户11172986
2025/03/24
2140
计算整层水汽通量散度是先积分后散度还是先散度后积分?
WRFOUT 涡度平流和温度平流计算与可视化
涡度平流和温度平流是两种常见的气象诊断量,可以帮助我们更好地理解大气运动和热力学过程。 以下代码将计算上述气象诊断量并可视化。
用户11172986
2024/06/20
5570
WRFOUT 涡度平流和温度平流计算与可视化
Python 绘制山体阴影+雷达图
本文旨在利用Python编程语言,将山体阴影与雷达速度产品相结合,以探索其可视化效果 环境:python 3.9
用户11172986
2024/06/20
1770
Python 绘制山体阴影+雷达图
WRF如何转换投影+模拟台风路径可视化
'linear':线性插值是一种基于线性关系进行插值的方法。它假设数据点之间的变化是线性的,并在相邻数据点之间进行插值。
用户11172986
2024/06/20
2670
WRF如何转换投影+模拟台风路径可视化
Python | ERA5任意经纬度风矢量剖面绘制
这次的代码没什么难点,主要是涉及单位转换 pa/s 转为 m/s 和wrf不同,metpy提供了直接的转换切向法向的函数,非常全面,不过不晓得有没有画错
用户11172986
2025/01/20
2590
Python | ERA5任意经纬度风矢量剖面绘制
Python可视化 | WRF模式模拟数据后处理(二)
导入模块 import numpy as np from netCDF4 import Dataset import matplotlib.pyplot as plt from matplotlib.cm import get_cmap from matplotlib.colors import from_levels_and_colors import cartopy.crs as crs import cartopy.feature as cfeature from cartopy.feature i
郭好奇同学
2021/08/26
4K0
Python可视化 | WRF模式模拟数据后处理(二)
WRFOUT 单层水汽通量散度与整层水汽通量散度实现 2.0
📢 版权声明:公益性质转载需联系作者本人获取授权。转载本文时,请务必文字注明“来自:和鲸社区:酷炫用户名”,并附带本项目超链接。
用户11172986
2024/11/29
2270
WRFOUT 单层水汽通量散度与整层水汽通量散度实现 2.0
台风路径可视化 | 强台风“天兔”移动轨迹图(Chiikawa版)
大家好!最近,2024年第25号台风天兔引起了网友们的广泛关注,因为它有一个特别的名字——“ウサギ”(Usagi),直译过来就是“兔子”。其本义是指天兔星座。 由于这个名字与《Chiikawa》漫画中的可爱角色“乌萨奇”(Usagi)同名,网友们亲切地称其为“乌萨奇台风”。这不仅增加了台风话题的趣味性,也让许多人对这次台风产生了更多的关注。
用户11172986
2024/11/25
4750
台风路径可视化 | 强台风“天兔”移动轨迹图(Chiikawa版)
metpy绘制锋生与冷锋
https://www.heywhale.com/mw/project/65485a22d74b63fed5f03f49
用户11172986
2024/06/20
3740
metpy绘制锋生与冷锋
数据处理与可视化 | 站点插值格点+空间区域掩膜
前两天写了插值+空间掩膜的推文,不过因为数据问题删除了。 后台很多朋友留言说有需要,还是想学习一下,因此自己造了个数据再把这篇文章推一遍。
MeteoAI
2021/02/07
2.4K1
WRF | WRF散度计算步骤及Python可视化实现
关注我获取更多学习资料,第一时间收到我的Python学习资料,也可获取我的联系方式沟通合作
用户11172986
2025/04/20
890
WRF | WRF散度计算步骤及Python可视化实现
metpy函数平滑台风风场流线图
九点平滑的工作原理是将风速数据中的每个值替换为该值及其八个相邻值的平均值。这具有平滑数据和消除任何高频噪声的效果。 下面是一步一步解释九点平滑器是如何工作的: 创建一个新数组来存储平滑后的值。 迭代风速数据数组。 对于数组中的每个值,获取八个相邻值。 计算九个值的平均值。 在新数组中存储平均值。 平滑过程完成后,新阵列将包含平滑后的风速数据。
用户11172986
2024/06/20
1930
metpy函数平滑台风风场流线图
一瞬又一瞬,累积起来便是一生 | ERA5数据计算垂直积分整层水汽通量散度
由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
用户11172986
2024/12/30
5940
一瞬又一瞬,累积起来便是一生 | ERA5数据计算垂直积分整层水汽通量散度
[实用]气象Python学习手册 by Unidata
页面链接:https://unidata.github.io/python-gallery/examples/index.html
bugsuse
2020/04/21
1.4K0
[实用]气象Python学习手册 by Unidata
Python气象绘图实例-我们一起画台风(代码+数据)
前段时间袭击中国的超强台风“利奇马”,以及这两天袭击美国的五级飓风“多利安”,让我们感受到了大自然的力量。所以,今天分享一个简单的Python实例,也算是延续前面python气象绘图系列(点击链接1;点击链接2),与大家交流如何选择合适的色标来绘制台风云顶亮温展示台风的部分特征。配色方案借鉴了GOES-16 Data[1]数据的处理方法。我们此次针对于中国区域进行一个展示,数据选取GridSat-B1 CDR(数据下载地址)[2]. A climate quality, long term dataset of global infrared window brightness temperatures. 1981-present (updated quarterly)。
MeteoAI
2019/09/05
5.3K3
Python气象绘图实例-我们一起画台风(代码+数据)
推荐阅读
相关推荐
使用metpy将台风数据插值转换为极坐标系
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验