基于 IBTrACS数据的台风路径快速可视化
台风路径快速可视化
个人信息
关注我获取更多学习资料,第一时间收到我的Python学习资料,也可获取我的联系方式沟通合作
温馨提示
由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
前言
Tropycal
Tropycal 是一个 Python 包,旨在简化检索和分析热带气旋数据的过程,既适用于过去的风暴,也适用于实时数据,主要面向研究和业务气象学领域。
Tropycal 可以读取 HURDAT2 和 IBTrACS 再分析数据以及国家飓风中心(NHC)的最佳路径数据,并将它们统一为同一格式,可用于进行气候学、季节性和单个风暴的分析。对于每个单独的风暴,可以检索和绘制操作性的 NHC 预报、模型预报、飞机侦察数据、降雨数据以及任何相关的龙卷风活动。
环境部署
代码语言:javascript代码运行次数:0运行复制!pip install tropycal -i /
代码语言:javascript代码运行次数:0运行复制Looking in indexes: /
Collecting tropycal
Downloading .3.tar.gz (10.1 MB)
[2K [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m10.1/10.1 MB[0m [31m31.6 MB/s[0m eta [36m0:00:00[0m00:01[0m0:01[0m
[?25h Preparing metadata (setup.py) ... [?25ldone
[?25hRequirement already satisfied: matplotlib>=2.2.2 in /opt/conda/lib/python3.9/site-packages (from tropycal) (3.8.3)
Requirement already satisfied: numpy>=1.14.3 in /opt/conda/lib/python3.9/site-packages (from tropycal) (1.26.4)
Requirement already satisfied: scipy>=1.1.0 in /opt/conda/lib/python3.9/site-packages (from tropycal) (1.11.4)
Requirement already satisfied: xarray>=0.10.7 in /opt/conda/lib/python3.9/site-packages (from tropycal) (2024.2.0)
Requirement already satisfied: pandas>=1.3.0 in /opt/conda/lib/python3.9/site-packages (from tropycal) (2.0.3)
Requirement already satisfied: networkx>=2.0.0 in /opt/conda/lib/python3.9/site-packages (from tropycal) (2.8)
Requirement already satisfied: requests>=2.22.0 in /opt/conda/lib/python3.9/site-packages (from tropycal) (2.27.1)
Requirement already satisfied: pyshp>=2.1 in /opt/conda/lib/python3.9/site-packages (from tropycal) (2.3.1)
Requirement already satisfied: pillow>=8 in /opt/conda/lib/python3.9/site-packages (from matplotlib>=2.2.2->tropycal) (9.4.0)
Requirement already satisfied: cycler>=0.10 in /opt/conda/lib/python3.9/site-packages (from matplotlib>=2.2.2->tropycal) (0.11.0)
Requirement already satisfied: contourpy>=1.0.1 in /opt/conda/lib/python3.9/site-packages (from matplotlib>=2.2.2->tropycal) (1.2.0)
Requirement already satisfied: packaging>=20.0 in /opt/conda/lib/python3.9/site-packages (from matplotlib>=2.2.2->tropycal) (23.2)
Requirement already satisfied: python-dateutil>=2.7 in /opt/conda/lib/python3.9/site-packages (from matplotlib>=2.2.2->tropycal) (2.8.2)
Requirement already satisfied: importlib-resources>=3.2.0 in /opt/conda/lib/python3.9/site-packages (from matplotlib>=2.2.2->tropycal) (5.7.1)
Requirement already satisfied: fonttools>=4.22.0 in /opt/conda/lib/python3.9/site-packages (from matplotlib>=2.2.2->tropycal) (4.33.3)
Requirement already satisfied: kiwisolver>=1.3.1 in /opt/conda/lib/python3.9/site-packages (from matplotlib>=2.2.2->tropycal) (1.4.2)
Requirement already satisfied: pyparsing>=2.3.1 in /opt/conda/lib/python3.9/site-packages (from matplotlib>=2.2.2->tropycal) (3.0.9)
Requirement already satisfied: pytz>=2020.1 in /opt/conda/lib/python3.9/site-packages (from pandas>=1.3.0->tropycal) (2022.1)
Requirement already satisfied: tzdata>=2022.1 in /opt/conda/lib/python3.9/site-packages (from pandas>=1.3.0->tropycal) (2024.1)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in /opt/conda/lib/python3.9/site-packages (from requests>=2.22.0->tropycal) (1.26.9)
Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.9/site-packages (from requests>=2.22.0->tropycal) (3.3)
Requirement already satisfied: charset-normalizer~=2.0.0 in /opt/conda/lib/python3.9/site-packages (from requests>=2.22.0->tropycal) (2.0.12)
Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.9/site-packages (from requests>=2.22.0->tropycal) (2024.2.2)
Requirement already satisfied: zipp>=3.1.0 in /opt/conda/lib/python3.9/site-packages (from importlib-resources>=3.2.0->matplotlib>=2.2.2->tropycal) (3.8.0)
Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.9/site-packages (from python-dateutil>=2.7->matplotlib>=2.2.2->tropycal) (1.16.0)
Building wheels for collected packages: tropycal
Building wheel for tropycal (setup.py) ... [?25ldone
[?25h Created wheel for tropycal: filename=tropycal-1.3-py3-none-any.whl size=242639 sha256=8fa0282e25b1de2ed7e73e2c6ad07d6775eb11fb18fb62a843228071802130e2
Stored in directory: /home/mw/.cache/pip/wheels/0f/13/85/10a0ae09d0a43a7a9ab81fae3e9133b1a246d1210c01070413
Successfully built tropycal
Installing collected packages: tropycal
Successfully installed tropycal-1.3
tropycal.tracks.TrackDataset
代码语言:javascript代码运行次数:0运行复制class tropycal.tracks.TrackDataset(
basin='north_atlantic',
source='hurdat',
include_btk=False,
interpolate_data=False,
**kwargs
)[source]
创建一个包含各种气旋数据的 TrackDataset
对象。
参数
- basin (
str
) – 要加载数据的海洋盆地。可以是以下之一: 名称数据源"north_atlantic"HURDAT2, IBTrACS"east_pacific"HURDAT2, IBTrACS"both"HURDAT2("north_atlantic" 和 "east_pacific" 合并)"west_pacific"IBTrACS"north_indian"IBTrACS"south_indian"IBTrACS"australia"IBTrACS*(特殊情况)"south_pacific"IBTrACS"south_atlantic"IBTrACS"all"IBTrACS - source (
str
) – 要读取的数据源。默认为 HURDAT2。- hurdat - 用于北大西洋和东/中太平洋盆地的 HURDAT2 数据源
- ibtracs - 用于区域或全球数据的 IBTrACS 数据源
- include_btk (
bool
, 可选) – 如果为True
,则将最近几年 NHC 最佳路径数据添加到数据集中,这些数据在 HURDAT2 中不存在。仅适用于 "north_atlantic" 和 "east_pacific" 盆地。默认为False
。 - interpolate_data (
bool
, 可选) – 如果为True
,则将所有风暴数据插值为每小时数据。默认为False
。
其他参数
- atlantic_url (
str
, 可选) – 北大西洋 HURDAT2 数据集的 URL。可以更改为本地 txt 引用文件。默认从在线 URL 获取。 - pacific_url (
str
, 可选) – 太平洋 HURDAT2 数据集的 URL。可以更改为本地 txt 引用文件。默认从在线 URL 获取。 - ibtracs_url (
str
, 可选) – IBTrACS 数据集的 URL。可以更改为本地 txt 引用文件。可以是区域或全部 IBTrACS 文件。如果为区域文件,盆地应与前面提供的盆地参数匹配。默认从在线 URL 获取。 - catarina (
bool
, 可选) – 修改数据集以包含 2004 年 Catarina 气旋的轨迹数据(来自 McTaggart-Cowan 等人的 2006 年研究)。默认为False
。 - ibtracs_hurdat (
bool
, 可选) – 将北太平洋和东/中太平洋盆地的 IBTrACS 数据替换为 HURDAT 数据。默认为False
。 - ibtracs_mode (
str
, 可选) – 读取 IBTrACS 的模式。默认为 "jtwc"。- wmo - 官方世界气象组织数据。需要注意的是,各盆地之间的持续风速方法不一致。
- jtwc - 默认。联合台风警报中心的非官方数据。需要注意的是,某些风暴缺失,某些风暴数据不准确。
- jtwc_neumann - 经过 Neumann 重新分析的 JTWC 数据,适用于南半球。改进了一些风暴(例如 1974 年的 Tracy 气旋),但恶化了其他一些风暴。
返回
- Dataset –
TrackDataset
类的一个实例。
import tropycal.tracks as tracks
import tropycal.tornado as tornado
import datetime as dt
ibtracs_url='/home/mw/input/IBTrACS5221/ibtracs.ALL.list.v04r01.csv'
ibtracs = tracks.TrackDataset(basin='all',source='ibtracs',ibtracs_mode='jtwc_neumann',catarina=True,ibtracs_url=ibtracs_url)
ibtracs
代码语言:javascript代码运行次数:0运行复制--> Starting to read in ibtracs data
--> Completed reading in ibtracs data (17.86 seconds)
<tropycal.tracks.Dataset>
Dataset Summary:
Basin: all
Source: ibtracs, jtwc_neumann
Number of storms: 8378
Maximum wind: 185 knots (Nancy 1961)
Minimum pressure: 2 hPa (Faith 1972)
Year range: 1851 — 2024
单台风绘图
方法一
代码语言:javascript代码运行次数:0运行复制ibtracs.plot_storm(('WUKONG',2018))
代码语言:javascript代码运行次数:0运行复制<GeoAxes: title={'left': 'Typhoon WUKONG', 'right': '22 Jul 2018 – 26 Jul 2018\n65 kt • 990 hPa • 3.9 ACE'}>
方法二
代码语言:javascript代码运行次数:0运行复制#Retrieve an instance of Storm for Hurricane Michael and store it in the variable "storm":
storm = ibtracs.get_storm(('WUKONG',2018))
#Plot the storm track for this Storm instance
storm.plot()
代码语言:javascript代码运行次数:0运行复制<GeoAxes: title={'left': 'Typhoon WUKONG', 'right': '22 Jul 2018 – 26 Jul 2018\n65 kt • 990 hPa • 3.9 ACE'}>
修改绘图范围
默认情况下,绘制风暴时设置为 domain='dynamic',这会放大整个路径。那让我们改一下范围
代码语言:javascript代码运行次数:0运行复制storm.plot(domain={'w':140,'e':175,'s':15,'n':50})
代码语言:javascript代码运行次数:0运行复制<GeoAxes: title={'left': 'Typhoon WUKONG', 'right': '22 Jul 2018 – 26 Jul 2018\n65 kt • 990 hPa • 3.9 ACE'}>
其他绘图风格
代码语言:javascript代码运行次数:0运行复制storm.plot(domain='dynamic_tropical',prop={'ms':10,'fillcolor':'blue','linecolor':'red','linewidth':2.0})
代码语言:javascript代码运行次数:0运行复制<GeoAxes: title={'left': 'Typhoon WUKONG', 'right': '22 Jul 2018 – 26 Jul 2018\n65 kt • 990 hPa • 3.9 ACE'}>
storm.plot(domain='dynamic_tropical',prop={'dots':False,'linecolor':'category','linewidth':3.0})
代码语言:javascript代码运行次数:0运行复制<GeoAxes: title={'left': 'Typhoon WUKONG', 'right': '22 Jul 2018 – 26 Jul 2018\n65 kt • 990 hPa • 3.9 ACE'}>
storm.plot(domain='dynamic_tropical',prop={'dots':False,'linecolor':'vmax','linewidth':3.0})
代码语言:javascript代码运行次数:0运行复制<GeoAxes: title={'left': 'Typhoon WUKONG', 'right': '22 Jul 2018 – 26 Jul 2018\n65 kt • 990 hPa • 3.9 ACE'}>
插值为小时数据
代码语言:javascript代码运行次数:0运行复制#Interpolate storm to hourly, and store as a new Storm object
storm_interpolated = storm.interp()
storm_interpolated
代码语言:javascript代码运行次数:0运行复制<tropycal.tracks.Storm>
Storm Summary:
Maximum Wind: 65 knots
Minimum Pressure: 974 hPa
Start Time: 2200 UTC 21 July 2018
End Time: 2000 UTC 26 July 2018
Variables:
time (datetime) [2018-07-21 06:00:00 .... 2018-07-27 06:00:00]
extra_obs (int64) [0 .... 0]
special (str) [ .... ]
type (str) [EX .... EX]
lat (float64) [20.6 .... 45.9]
lon (float64) [158.8 .... 153.2]
vmax (int64) [20 .... 20]
mslp (int64) [1008 .... 1007]
wmo_type (str) [DS .... ET]
wmo_lat (float64) [20.6 .... 45.8]
wmo_lon (float64) [158.8 .... 153.3]
wmo_vmax (float64) [nan .... nan]
wmo_mslp (float64) [nan .... 1008.0]
wmo_basin (str) [west_pacific .... west_pacific]
dvmax_dt (float64) [nan .... nan]
dmslp_dt (float64) [nan .... nan]
dx_dt (float64) [nan .... nan]
dy_dt (float64) [nan .... nan]
speed (float64) [nan .... nan]
More Information:
id: WP142018
operational_id:
name: WUKONG
year: 2018
season: 2018
basin: all
source: ibtracs
source_info: Joint Typhoon Warning Center (unofficial) & Charles Neumann reanalysis for South Hemisphere storms
ace: 3.9
realtime: False
invest: False
subset: False
dt_window: 24
dt_align: middle
多台风绘制(五个悟空)
代码语言:javascript代码运行次数:0运行复制ibtracs.plot_storms([('WUKONG',2000),('WUKONG',2006),('WUKONG',2012),('WUKONG',2018),('WUKONG',2024)],
prop={'linecolor':'category','linewidth':3,'plot_names':True})
代码语言:javascript代码运行次数:0运行复制<GeoAxes: title={'left': 'TC Track Composite'}>
小结
使用这个库可以方便地进行历史台风绘制进行分析 当然只是进行简单使用,论文绘图还得上matplotlib和cartopy
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-03-26,如有侵权请联系 cloudcommunity@tencent 删除可视化数据condapython3storm发布者:admin,转转请注明出处:http://www.yc00.com/web/1748128468a4735761.html
评论列表(0条)