{ "cells": [ { "cell_type": "markdown", "id": "38558737-6203-4c35-8f2e-ebec77bc0985", "metadata": {}, "source": [ "# Interannual Variability" ] }, { "cell_type": "code", "execution_count": null, "id": "9c0739ac-412e-45cf-b8fd-85013ce915ad", "metadata": {}, "outputs": [], "source": [ "import huracanpy\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": null, "id": "aad64ec3-1075-4eaa-be21-e7d1531d063b", "metadata": {}, "outputs": [], "source": [ "# Load the data. Here: IBTrACS\n", "data = huracanpy.load(source=\"ibtracs\")" ] }, { "cell_type": "code", "execution_count": null, "id": "ab728dab-439e-4280-81d2-4a1a183ca824", "metadata": {}, "outputs": [], "source": [ "# Get the basins\n", "data[\"basin\"] = huracanpy.info.basin(data.lon, data.lat)\n", "# Equivalent to data = data.hrcn.add_basin()" ] }, { "cell_type": "code", "execution_count": null, "id": "7fa6dc3f-cfe6-4433-b08c-3ac8c8612413", "metadata": {}, "outputs": [], "source": [ "# Select the basin you're interested in (here: North Atlantic -- NATL)\n", "## Option 1: Get only the points within this basin\n", "NATL1 = data.where(data.basin == \"NATL\", drop=True)\n", "## Option 2: Select tracks that have at least one point in this basin\n", "### 2a : calling hurcanpy\n", "NATL2a = huracanpy.trackswhere(data, data.track_id, lambda t: (t.basin == \"NATL\").any())\n", "### 2b : Using the accessor\n", "NATL2b = data.hrcn.trackswhere(lambda t: (t.basin == \"NATL\").any())" ] }, { "cell_type": "code", "execution_count": null, "id": "5923a55c-7cd1-4087-ad8b-b6d6c38e09fb", "metadata": {}, "outputs": [], "source": [ "# Plot interannual variability\n", "fig, axs = plt.subplots(3, figsize=[15, 5], sharex=True)\n", "\n", "## Frequency\n", "gen = huracanpy.calc.gen_vals(\n", " NATL1, NATL1.time, NATL1.track_id\n", ") # eq. to gen = data.hrcn.get_gen_vals()\n", "freq = gen.groupby(\"season\").count().time\n", "freq.plot(ax=axs[0], label=\"frequency\")\n", "\n", "## TC days\n", "tcd = NATL1.groupby(\"season\").apply(\n", " lambda s: huracanpy.calc.track_duration(\n", " s.time, s.track_id\n", " ).sum() # eq. to s.hrcn.get_track_duration().sum()\n", " / 24 # Conversion because track_duration is in h\n", ")\n", "tcd.plot(ax=axs[1], label=\"TC days\")\n", "\n", "## ACE\n", "ace = NATL1.groupby(\"season\").apply(\n", " lambda s: huracanpy.tc.ace(s.wind).sum() # eq. to s.hrcn.get_ace().sum()\n", ")\n", "ace.plot(ax=axs[2], label=\"ACE\")\n", "\n", "# Labels\n", "axs[0].set_ylabel(\"#TC\")\n", "axs[1].set_ylabel(\"TC Days\")\n", "axs[2].set_ylabel(\"ACE\")\n", "for ax in axs:\n", " ax.set_xlabel(\"\")\n", " ax.set_xticks(range(1980, 2022, 5))\n", " ax.grid()" ] }, { "cell_type": "code", "execution_count": null, "id": "cb19ad9f-6e2e-40ee-9711-ddcfccbd472b", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.12" } }, "nbformat": 4, "nbformat_minor": 5 }