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/stable/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/stable/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/stable/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/stable/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/dfde0896641b36b2dfb2db9a20a4a4677fd75ed651d2076e3d9519cf1d8e9123.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/c550e4b21ecaa2daba38d597990d5e9ca9a131450068960b48c842d28b26a5d7.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/61c67cc958304c80a3ef440a8d091947e7397ac598063c188d7836ffe63805b1.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/d1f8187bd1c6e3ac927e6b95db539a4a51f912414ea63f0ac6acc5a47c9dcbdf.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.