Skip to content

Tropical Cyclones

This notebook presents the climatologies of tropical cyclones in the global oceans

Historic global TC tracks

%config IPCompleter.greedy = True
%matplotlib inline
%config InlineBackend.figure_format='retina'
%load_ext autoreload
%autoreload 2

import warnings
warnings.filterwarnings('ignore')

import numpy as np
import xarray as xr
import senpy as sp

import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
import matplotlib.patches as mpatches
from matplotlib.colors import ListedColormap, BoundaryNorm

categories = ['TD', 'TS', 'C1', 'C2', 'C3', 'C4', 'C5']
wind_speeds = ['≤ 33', '34–63', '64–82', '83–95', '96–112', '113–136', '≥137']
# cate_colors = ['#5ebaff', '#00faf4', '#ffffcc', '#ffe775', '#ffc140', '#ff8f20', '#ff6060']
cate_colors = np.array([[23,172,240],[114,198,194],[252,248,183],[249,226,103],[254,194,31],[242,130,46,],[231,27,30]])/256
TC_cmap = ListedColormap(cate_colors)
TC_norm = BoundaryNorm([0, 34, 64, 83, 96, 113, 137], TC_cmap.N+1, extend='max') # this is based on wind speed in unit of kts
TC_patches = [mpatches.Patch(color=color, label=f'{cat} ({speed})') for cat, color, speed in zip(categories, cate_colors, wind_speeds)]

color_ocean = np.array([24,22,91])/256
color_land = np.array([75,77,15])/256

def add_tc_track_color_by_density(ax, x, y, wind):
    # Create a set of line segments so that we can color them individually
    # This creates a list of the endpoints of a bunch of segments
    points = np.array([x, y]).T.reshape(-1, 1, 2)
    segments = np.concatenate([points[:-1], points[1:]], axis=1)
    lc = LineCollection(segments, cmap=TC_cmap, norm=TC_norm, alpha=1, transform=sp.data_crs)
    # Set the values used for colormapping
    lc.set_array(wind)
    lc.set_linewidth(1)
    ax.add_collection(lc)
    return lc
I_ds = xr.open_dataset('../../../data/TC/IBTrACS.ALL.v04r01.nc')
sel_Ids = I_ds.sel(storm=np.logical_and(I_ds.season>=1980, I_ds.season<=2022))
sort_Ids = sel_Ids.sortby(sel_Ids['usa_wind'].max(dim='date_time'))
fig, ax = sp.map_subplots(1, 1, figsize=(10, 8), proj='cyl', lon_0=200)

for i in range(len(sort_Ids.storm)):
    tc = sort_Ids.isel(storm=i)[['lon', 'lat', 'usa_wind']]
    tc_lon = tc['lon'].dropna('date_time')
    try:
        tc = tc.sel(date_time=tc_lon.date_time)
        lc = add_tc_track_color_by_density(ax, tc.lon.values, tc.lat.values, tc.usa_wind.values)
    except:
        pass

sp.map_extent(ax, extent=[20, 380, -90, 90])
sp.map_oceanmask(ax, fc=color_ocean, scale='50m', zorder=0)
sp.map_landmask(ax, fc=color_land, zorder=0)
sp.map_coastline(ax, scale='50m')
ax.set_title("Historic global TC tracks for 1980-2022", fontsize=14, fontweight='bold')

legend = ax.legend(handles=TC_patches, loc='lower right', bbox_to_anchor=(1.006, -0.012), 
                   title='Wind speed (knots)', title_fontsize=6.5, fancybox=True, 
                   prop={'size': 6.5})

# Add dataset and map sources
source_text = """
Source credits: TC data from IBTrACSv04r01 data, figure was created by @senclimate
"""
ax.text(0.5, -0.0, source_text, transform=ax.transAxes, 
        fontsize=10, color='black', alpha=0.8, 
        ha='center', va='top', zorder=6);

png

Key points

The following analysis is copied from https://ftp.comet.ucar.edu/memory-stick/tropical/textbook_2nd_edition/print_8.htm

Some key things about the global distribution of tropical cyclones:

  • Tropical cyclones do not form very close to the equator and do not ever cross the equator;
  • The western North Pacific is the most active tropical cyclone region. It is also the region with the largest number of intense tropical cyclones (orange through red tracks);
  • Tropical cyclones in the western North Pacific and the North Atlantic can have tracks that extend to very high latitudes. Storms following these long tracks generally undergo extratropical transition;
  • The North Indian Ocean (Bay of Bengal and Arabian Sea) is bounded by land to the north and the eastern North Pacific is bounded by cold water to the north. These environmental features limit the lifetimes of storms in these regions.
  • The Bay of Bengal has about five times as many tropical cyclones as the Arabian Sea. The high mountain ranges and low-lying coastal plains and river deltas of the Bay of Bengal combine to make this region extremely vulnerable to tropical cyclones. Indeed, the two most devastating tropical cyclones on record occurred in this region.
  • Southern Hemisphere tropical cyclones are generally weaker than storms in the North Pacific and Atlantic basins;
  • The extension of the subtropical jet into tropical latitudes in the Southern Hemisphere acts to constrain the tracks of tropical cyclones. Even so, a few Southern Hemisphere tropical cyclones undergo extratropical transition;
  • Although rare, systems resembling tropical cyclones can occur in the South Atlantic Ocean and off the subtropical east coasts of Australia and southern Africa.