前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >基于 IBTrACS数据的台风路径快速可视化

基于 IBTrACS数据的台风路径快速可视化

作者头像
用户11172986
发布2025-03-27 16:13:44
发布2025-03-27 16:13:44
8800
代码可运行
举报
文章被收录于专栏:气python风雨气python风雨
运行总次数:0
代码可运行

台风路径快速可视化

个人信息

关注我获取更多学习资料,第一时间收到我的Python学习资料,也可获取我的联系方式沟通合作

温馨提示

由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可

前言

Tropycal

Tropycal 是一个 Python 包,旨在简化检索和分析热带气旋数据的过程,既适用于过去的风暴,也适用于实时数据,主要面向研究和业务气象学领域。

Tropycal 可以读取 HURDAT2 和 IBTrACS 再分析数据以及国家飓风中心(NHC)的最佳路径数据,并将它们统一为同一格式,可用于进行气候学、季节性和单个风暴的分析。对于每个单独的风暴,可以检索和绘制操作性的 NHC 预报、模型预报、飞机侦察数据、降雨数据以及任何相关的龙卷风活动。

环境部署

代码语言:javascript
代码运行次数:0
运行
复制
!pip install tropycal -i https://pypi.mirrors.ustc.edu.cn/simple/
代码语言:javascript
代码运行次数:0
运行
复制
Looking in indexes: https://pypi.mirrors.ustc.edu.cn/simple/
Collecting tropycal
  Downloading https://mirrors.ustc.edu.cn/pypi/packages/70/a6/1bbc3780c7c2eddc309b0717bf89a0c60632733bc9e10d1ffec14b264089/tropycal-1.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 气旋),但恶化了其他一些风暴。
返回
  • DatasetTrackDataset 类的一个实例。

代码语言:javascript
代码运行次数:0
运行
复制
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'}>
代码语言:javascript
代码运行次数:0
运行
复制
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'}>
代码语言:javascript
代码运行次数:0
运行
复制
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.com 删除

本文分享自 气python风雨 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 台风路径快速可视化
    • 个人信息
    • 温馨提示
    • 前言
    • Tropycal
    • 环境部署
    • tropycal.tracks.TrackDataset
      • 参数
      • 其他参数
      • 返回
  • 单台风绘图
    • 方法一
    • 方法二
    • 修改绘图范围
    • 其他绘图风格
    • 插值为小时数据
    • 多台风绘制(五个悟空)
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档