Skip to main content
Ctrl+K

imdtrack

  • Installation
  • User Guide
  • API reference
  • Contributing to imdtrack
  • GitHub
  • PyPI
  • Installation
  • User Guide
  • API reference
  • Contributing to imdtrack
  • GitHub
  • PyPI

Section Navigation

Get started

  • Loading the data
  • The data model
  • Staying up to date
  • Data quality

Examples

  • Quickstart
  • Track plotting gallery
  • North Indian Ocean cyclone climatology
  • User Guide
  • Track plotting gallery

Track plotting gallery#

The optional [plot] extra (pip install imdtrack[plot]) adds Cartopy maps via imd.plot_track (one storm) and imd.plot_tracks (many). Tracks are drawn as intensity-coloured lines over a clean basemap — tropycal-style, but using IMD grades. Everything below runs on the committed dataset.

import imdtrack as imd

bt = imd.load().clean(fix_dates=True)

A single track, coloured by IMD category#

Storms can be looked up by storm_id or name (case-insensitive). Genesis (●), lifetime peak (★) and dissipation (✖) are marked; annotate=True labels them.

imd.plot_track(bt.storm("tauktae"), color="grade", annotate=True)
<GeoAxes: >
/home/docs/checkouts/readthedocs.org/user_builds/imdtrack/envs/latest/lib/python3.12/site-packages/cartopy/io/__init__.py:242: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/50m_physical/ne_50m_ocean.zip
  warnings.warn(f'Downloading: {url}', DownloadWarning)
/home/docs/checkouts/readthedocs.org/user_builds/imdtrack/envs/latest/lib/python3.12/site-packages/cartopy/io/__init__.py:242: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/50m_physical/ne_50m_land.zip
  warnings.warn(f'Downloading: {url}', DownloadWarning)
/home/docs/checkouts/readthedocs.org/user_builds/imdtrack/envs/latest/lib/python3.12/site-packages/cartopy/io/__init__.py:242: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/50m_physical/ne_50m_coastline.zip
  warnings.warn(f'Downloading: {url}', DownloadWarning)
/home/docs/checkouts/readthedocs.org/user_builds/imdtrack/envs/latest/lib/python3.12/site-packages/cartopy/io/__init__.py:242: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/50m_cultural/ne_50m_admin_0_boundary_lines_land.zip
  warnings.warn(f'Downloading: {url}', DownloadWarning)
../_images/9b4c26da2e4b0840a89123999cb5e426e03e4de70a9a827310505b35358d0d8a.png

…or coloured by wind speed#

The strongest storm on record — the 1999 Odisha super cyclone (140 kt). Pass extent=[lon0, lon1, lat0, lat1] to frame the whole basin (rather than auto-fitting the track) and title="…" for your own title.

strongest = bt.storms.loc[bt.storms["max_wind"].idxmax(), "storm_id"]
imd.plot_track(
    bt.storm(strongest),
    color="wind",
    cmap="turbo",
    extent=[60, 100, 0, 40],
    title="Strongest on record",
)
<GeoAxes: >
../_images/ee2c3c78ef102f72fd6db1465f20d88537ac119f1abe2a157205ae5a32d35c73.png

Every track on one map, by sub-basin#

plot_tracks overlays the whole archive; colour by "basin" (Bay of Bengal vs Arabian Sea) …

imd.plot_tracks(
    bt.observations, color="basin", title="North Indian Ocean best tracks, 1982–present"
)
<GeoAxes: title={'center': 'North Indian Ocean best tracks, 1982–present'}>
../_images/ea736705b5ab18bed7baf957666cb24dac5727a35b6646f6c13fd61f9156bbc4.png

… or by each storm’s peak intensity#

imd.plot_tracks(bt.observations, color="grade", title="Tracks by peak IMD grade")
<GeoAxes: title={'center': 'Tracks by peak IMD grade'}>
../_images/12fdf593edb5f18713e22e945888723bb042d894e8770c9971c8781e3d8ff38b.png

Both functions accept an existing Cartopy ax (pass ax=...) and an extent [lon0, lon1, lat0, lat1], so you can compose them into multi-panel figures or zoom to a region.

On this page
  • A single track, coloured by IMD category
  • …or coloured by wind speed
  • Every track on one map, by sub-basin
  • … or by each storm’s peak intensity
Edit on GitHub
Show Source

© Copyright 2026, Hamid Ali Syed.

Created using Sphinx 9.1.0.

Built with the PyData Sphinx Theme 0.20.0.