Skip to content

Commit d71913b

Browse files
committed
update example of propagation and lifetime
1 parent f617718 commit d71913b

File tree

7 files changed

+87
-89
lines changed

7 files changed

+87
-89
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
Grid Manipulation
2-
=======================
2+
=================
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
Tracking Manipulation
2-
=======================
2+
=====================
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
Tracking diagnostics
2-
=======================
2+
====================

examples/10_tracking_diagnostics/pet_lifetime.py

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from matplotlib import pyplot as plt
77
from py_eddy_tracker.observations.tracking import TrackEddiesObservations
88
import py_eddy_tracker_sample
9-
from numpy import arange
9+
from numpy import arange, ones
1010

1111
# %%
1212
# Load an experimental med atlas over a period of 26 years (1993-2019)
@@ -16,39 +16,41 @@
1616
c = TrackEddiesObservations.load_file(
1717
py_eddy_tracker_sample.get_path("eddies_med_adt_allsat_dt2018/Cyclonic.zarr")
1818
)
19+
nb_year = (a.period[1] - a.period[0] + 1) / 365.25
1920

2021
# %%
21-
# Plot
22-
fig = plt.figure()
23-
ax_lifetime = fig.add_axes([0.05, 0.55, 0.4, 0.4])
24-
ax_cum_lifetime = fig.add_axes([0.55, 0.55, 0.4, 0.4])
25-
ax_ratio_lifetime = fig.add_axes([0.05, 0.05, 0.4, 0.4])
26-
ax_ratio_cum_lifetime = fig.add_axes([0.55, 0.05, 0.4, 0.4])
27-
28-
cum_a, bins, _ = ax_cum_lifetime.hist(
29-
a["n"], histtype="step", bins=arange(0, 800, 1), label="Anticyclonic", color="r"
30-
)
31-
cum_c, bins, _ = ax_cum_lifetime.hist(
32-
c["n"], histtype="step", bins=arange(0, 800, 1), label="Cyclonic", color="b"
33-
)
34-
35-
x = (bins[1:] + bins[:-1]) / 2.0
36-
ax_ratio_cum_lifetime.plot(x, cum_c / cum_a)
37-
38-
nb_a, nb_c = cum_a[:-1] - cum_a[1:], cum_c[:-1] - cum_c[1:]
39-
ax_lifetime.plot(x[1:], nb_a, label="Anticyclonic", color="r")
40-
ax_lifetime.plot(x[1:], nb_c, label="Cyclonic", color="b")
41-
42-
ax_ratio_lifetime.plot(x[1:], nb_c / nb_a)
43-
44-
for ax in (ax_lifetime, ax_cum_lifetime, ax_ratio_cum_lifetime, ax_ratio_lifetime):
45-
ax.set_xlim(0, 365)
46-
if ax in (ax_lifetime, ax_cum_lifetime):
47-
ax.set_ylim(1, None)
48-
ax.set_yscale("log")
49-
ax.legend()
22+
# Setup axes
23+
figure = plt.figure(figsize=(12, 8))
24+
ax_ratio_cum = figure.add_axes([0.55, 0.06, 0.42, 0.34])
25+
ax_ratio = figure.add_axes([0.07, 0.06, 0.46, 0.34])
26+
ax_cum = figure.add_axes([0.55, 0.43, 0.42, 0.54])
27+
ax = figure.add_axes([0.07, 0.43, 0.46, 0.54])
28+
ax.set_ylabel("Eddies by year")
29+
ax_ratio.set_ylabel("Ratio Cyclonic/Anticyclonic")
30+
for ax_ in (ax, ax_cum, ax_ratio_cum, ax_ratio):
31+
ax_.set_xlim(0, 400)
32+
if ax_ in (ax, ax_cum):
33+
ax_.set_ylim(1e-1, 1e4), ax_.set_yscale("log")
5034
else:
51-
ax.set_ylim(0, 2)
52-
ax.set_ylabel("Ratio Cyclonic/Anticyclonic")
53-
ax.set_xlabel("Lifetime (days)")
54-
ax.grid()
35+
ax_.set_xlabel("Lifetime in days (by week bins)")
36+
ax_.set_ylim(0, 2)
37+
ax_.axhline(1, color="g", lw=2)
38+
ax_.grid()
39+
ax_cum.xaxis.set_ticklabels([]), ax_cum.yaxis.set_ticklabels([])
40+
ax.xaxis.set_ticklabels([]), ax_ratio_cum.yaxis.set_ticklabels([])
41+
42+
# plot data
43+
bin_hist = arange(7, 2000, 7)
44+
x = (bin_hist[1:] + bin_hist[:-1]) / 2.0
45+
a_nb, c_nb = a.nb_obs_by_track, c.nb_obs_by_track
46+
a_nb, c_nb = a_nb[a_nb != 0], c_nb[c_nb != 0]
47+
w_a, w_c = ones(a_nb.shape) / nb_year, ones(c_nb.shape) / nb_year
48+
kwargs_a = dict(histtype="step", bins=bin_hist, x=a_nb, color="r", weights=w_a)
49+
kwargs_c = dict(histtype="step", bins=bin_hist, x=c_nb, color="b", weights=w_c)
50+
cum_a, _, _ = ax_cum.hist(cumulative=-1, **kwargs_a)
51+
cum_c, _, _ = ax_cum.hist(cumulative=-1, **kwargs_c)
52+
nb_a, _, _ = ax.hist(label="Anticyclonic", **kwargs_a)
53+
nb_c, _, _ = ax.hist(label="Cyclonic", **kwargs_c)
54+
ax_ratio_cum.plot(x, cum_c / cum_a)
55+
ax_ratio.plot(x, nb_c / nb_a)
56+
ax.legend()

examples/10_tracking_diagnostics/pet_propagation.py

Lines changed: 38 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from py_eddy_tracker.observations.tracking import TrackEddiesObservations
88
from py_eddy_tracker.generic import cumsum_by_track
99
import py_eddy_tracker_sample
10-
from numpy import arange
10+
from numpy import arange, ones
1111

1212
# %%
1313
# Load an experimental med atlas over a period of 26 years (1993-2019)
@@ -17,6 +17,7 @@
1717
c = TrackEddiesObservations.load_file(
1818
py_eddy_tracker_sample.get_path("eddies_med_adt_allsat_dt2018/Cyclonic.zarr")
1919
)
20+
nb_year = (a.period[1] - a.period[0] + 1) / 365.25
2021

2122
# %%
2223
# Filtering position to remove noisy position
@@ -25,47 +26,42 @@
2526

2627
# %%
2728
# Compute curvilign distance
28-
d_a = cumsum_by_track(a.distance_to_next(), a.tracks) / 1000.0
29-
d_c = cumsum_by_track(c.distance_to_next(), c.tracks) / 1000.0
29+
i0, nb = a.index_from_track, a.nb_obs_by_track
30+
d_a = cumsum_by_track(a.distance_to_next(), a.tracks)[(i0 - 1 + nb)[nb != 0]] / 1000.0
31+
i0, nb = c.index_from_track, c.nb_obs_by_track
32+
d_c = cumsum_by_track(c.distance_to_next(), c.tracks)[(i0 - 1 + nb)[nb != 0]] / 1000.0
3033

3134
# %%
32-
# Plot
33-
fig = plt.figure()
34-
ax_propagation = fig.add_axes([0.05, 0.55, 0.4, 0.4])
35-
ax_cum_propagation = fig.add_axes([0.55, 0.55, 0.4, 0.4])
36-
ax_ratio_propagation = fig.add_axes([0.05, 0.05, 0.4, 0.4])
37-
ax_ratio_cum_propagation = fig.add_axes([0.55, 0.05, 0.4, 0.4])
38-
39-
bins = arange(0, 1500, 10)
40-
cum_a, bins, _ = ax_cum_propagation.hist(
41-
d_a, histtype="step", bins=bins, label="Anticyclonic", color="r"
42-
)
43-
cum_c, bins, _ = ax_cum_propagation.hist(
44-
d_c, histtype="step", bins=bins, label="Cyclonic", color="b"
45-
)
46-
47-
x = (bins[1:] + bins[:-1]) / 2.0
48-
ax_ratio_cum_propagation.plot(x, cum_c / cum_a)
49-
50-
nb_a, nb_c = cum_a[:-1] - cum_a[1:], cum_c[:-1] - cum_c[1:]
51-
ax_propagation.plot(x[1:], nb_a, label="Anticyclonic", color="r")
52-
ax_propagation.plot(x[1:], nb_c, label="Cyclonic", color="b")
53-
54-
ax_ratio_propagation.plot(x[1:], nb_c / nb_a)
55-
56-
for ax in (
57-
ax_propagation,
58-
ax_cum_propagation,
59-
ax_ratio_cum_propagation,
60-
ax_ratio_propagation,
61-
):
62-
ax.set_xlim(0, 1000)
63-
if ax in (ax_propagation, ax_cum_propagation):
64-
ax.set_ylim(1, None)
65-
ax.set_yscale("log")
66-
ax.legend()
35+
# Setup axes
36+
figure = plt.figure(figsize=(12, 8))
37+
ax_ratio_cum = figure.add_axes([0.55, 0.06, 0.42, 0.34])
38+
ax_ratio = figure.add_axes([0.07, 0.06, 0.46, 0.34])
39+
ax_cum = figure.add_axes([0.55, 0.43, 0.42, 0.54])
40+
ax = figure.add_axes([0.07, 0.43, 0.46, 0.54])
41+
ax.set_ylabel("Eddies by year")
42+
ax_ratio.set_ylabel("Ratio Cyclonic/Anticyclonic")
43+
for ax_ in (ax, ax_cum, ax_ratio_cum, ax_ratio):
44+
ax_.set_xlim(0, 1000)
45+
if ax_ in (ax, ax_cum):
46+
ax_.set_ylim(1e-1, 1e4), ax_.set_yscale("log")
6747
else:
68-
ax.set_ylim(0, 2)
69-
ax.set_ylabel("Ratio Cyclonic/Anticyclonic")
70-
ax.set_xlabel("Propagation (km)")
71-
ax.grid()
48+
ax_.set_xlabel("Propagation in km (with bins of 20 km)")
49+
ax_.set_ylim(0, 2)
50+
ax_.axhline(1, color="g", lw=2)
51+
ax_.grid()
52+
ax_cum.xaxis.set_ticklabels([]), ax_cum.yaxis.set_ticklabels([])
53+
ax.xaxis.set_ticklabels([]), ax_ratio_cum.yaxis.set_ticklabels([])
54+
55+
# plot data
56+
bin_hist = arange(0, 2000, 20)
57+
x = (bin_hist[1:] + bin_hist[:-1]) / 2.0
58+
w_a, w_c = ones(d_a.shape) / nb_year, ones(d_c.shape) / nb_year
59+
kwargs_a = dict(histtype="step", bins=bin_hist, x=d_a, color="r", weights=w_a)
60+
kwargs_c = dict(histtype="step", bins=bin_hist, x=d_c, color="b", weights=w_c)
61+
cum_a, _, _ = ax_cum.hist(cumulative=-1, **kwargs_a)
62+
cum_c, _, _ = ax_cum.hist(cumulative=-1, **kwargs_c)
63+
nb_a, _, _ = ax.hist(label="Anticyclonic", **kwargs_a)
64+
nb_c, _, _ = ax.hist(label="Cyclonic", **kwargs_c)
65+
ax_ratio_cum.plot(x, cum_c / cum_a)
66+
ax_ratio.plot(x, nb_c / nb_a)
67+
ax.legend()

notebooks/python_module/10_tracking_diagnostics/pet_lifetime.ipynb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"cell_type": "markdown",
1616
"metadata": {},
1717
"source": [
18-
"\nLifetime Histogram\n===================\n"
18+
"\n# Lifetime Histogram\n"
1919
]
2020
},
2121
{
@@ -26,7 +26,7 @@
2626
},
2727
"outputs": [],
2828
"source": [
29-
"from matplotlib import pyplot as plt\nfrom py_eddy_tracker.observations.tracking import TrackEddiesObservations\nimport py_eddy_tracker_sample\nfrom numpy import arange"
29+
"from matplotlib import pyplot as plt\nfrom py_eddy_tracker.observations.tracking import TrackEddiesObservations\nimport py_eddy_tracker_sample\nfrom numpy import arange, ones"
3030
]
3131
},
3232
{
@@ -44,14 +44,14 @@
4444
},
4545
"outputs": [],
4646
"source": [
47-
"a = TrackEddiesObservations.load_file(\n py_eddy_tracker_sample.get_path(\"eddies_med_adt_allsat_dt2018/Anticyclonic.zarr\")\n)\nc = TrackEddiesObservations.load_file(\n py_eddy_tracker_sample.get_path(\"eddies_med_adt_allsat_dt2018/Cyclonic.zarr\")\n)"
47+
"a = TrackEddiesObservations.load_file(\n py_eddy_tracker_sample.get_path(\"eddies_med_adt_allsat_dt2018/Anticyclonic.zarr\")\n)\nc = TrackEddiesObservations.load_file(\n py_eddy_tracker_sample.get_path(\"eddies_med_adt_allsat_dt2018/Cyclonic.zarr\")\n)\nnb_year = (a.period[1] - a.period[0] + 1) / 365.25"
4848
]
4949
},
5050
{
5151
"cell_type": "markdown",
5252
"metadata": {},
5353
"source": [
54-
"Plot\n\n"
54+
"Setup axes\n\n"
5555
]
5656
},
5757
{
@@ -62,7 +62,7 @@
6262
},
6363
"outputs": [],
6464
"source": [
65-
"fig = plt.figure()\nax_lifetime = fig.add_axes([0.05, 0.55, 0.4, 0.4])\nax_cum_lifetime = fig.add_axes([0.55, 0.55, 0.4, 0.4])\nax_ratio_lifetime = fig.add_axes([0.05, 0.05, 0.4, 0.4])\nax_ratio_cum_lifetime = fig.add_axes([0.55, 0.05, 0.4, 0.4])\n\ncum_a, bins, _ = ax_cum_lifetime.hist(\n a[\"n\"], histtype=\"step\", bins=arange(0, 800, 1), label=\"Anticyclonic\", color=\"r\"\n)\ncum_c, bins, _ = ax_cum_lifetime.hist(\n c[\"n\"], histtype=\"step\", bins=arange(0, 800, 1), label=\"Cyclonic\", color=\"b\"\n)\n\nx = (bins[1:] + bins[:-1]) / 2.0\nax_ratio_cum_lifetime.plot(x, cum_c / cum_a)\n\nnb_a, nb_c = cum_a[:-1] - cum_a[1:], cum_c[:-1] - cum_c[1:]\nax_lifetime.plot(x[1:], nb_a, label=\"Anticyclonic\", color=\"r\")\nax_lifetime.plot(x[1:], nb_c, label=\"Cyclonic\", color=\"b\")\n\nax_ratio_lifetime.plot(x[1:], nb_c / nb_a)\n\nfor ax in (ax_lifetime, ax_cum_lifetime, ax_ratio_cum_lifetime, ax_ratio_lifetime):\n ax.set_xlim(0, 365)\n if ax in (ax_lifetime, ax_cum_lifetime):\n ax.set_ylim(1, None)\n ax.set_yscale(\"log\")\n ax.legend()\n else:\n ax.set_ylim(0, 2)\n ax.set_ylabel(\"Ratio Cyclonic/Anticyclonic\")\n ax.set_xlabel(\"Lifetime (days)\")\n ax.grid()"
65+
"figure = plt.figure(figsize=(12, 8))\nax_ratio_cum = figure.add_axes([0.55, 0.06, 0.42, 0.34])\nax_ratio = figure.add_axes([0.07, 0.06, 0.46, 0.34])\nax_cum = figure.add_axes([0.55, 0.43, 0.42, 0.54])\nax = figure.add_axes([0.07, 0.43, 0.46, 0.54])\nax.set_ylabel(\"Eddies by year\")\nax_ratio.set_ylabel(\"Ratio Cyclonic/Anticyclonic\")\nfor ax_ in (ax, ax_cum, ax_ratio_cum, ax_ratio):\n ax_.set_xlim(0, 400)\n if ax_ in (ax, ax_cum):\n ax_.set_ylim(1e-1, 1e4), ax_.set_yscale(\"log\")\n else:\n ax_.set_xlabel(\"Lifetime in days (by week bins)\")\n ax_.set_ylim(0, 2)\n ax_.axhline(1, color=\"g\", lw=2)\n ax_.grid()\nax_cum.xaxis.set_ticklabels([]), ax_cum.yaxis.set_ticklabels([])\nax.xaxis.set_ticklabels([]), ax_ratio_cum.yaxis.set_ticklabels([])\n\n# plot data\nbin_hist = arange(7, 2000, 7)\nx = (bin_hist[1:] + bin_hist[:-1]) / 2.0\na_nb, c_nb = a.nb_obs_by_track, c.nb_obs_by_track\na_nb, c_nb = a_nb[a_nb != 0], c_nb[c_nb != 0]\nw_a, w_c = ones(a_nb.shape) / nb_year, ones(c_nb.shape) / nb_year\nkwargs_a = dict(histtype=\"step\", bins=bin_hist, x=a_nb, color=\"r\", weights=w_a)\nkwargs_c = dict(histtype=\"step\", bins=bin_hist, x=c_nb, color=\"b\", weights=w_c)\ncum_a, _, _ = ax_cum.hist(cumulative=-1, **kwargs_a)\ncum_c, _, _ = ax_cum.hist(cumulative=-1, **kwargs_c)\nnb_a, _, _ = ax.hist(label=\"Anticyclonic\", **kwargs_a)\nnb_c, _, _ = ax.hist(label=\"Cyclonic\", **kwargs_c)\nax_ratio_cum.plot(x, cum_c / cum_a)\nax_ratio.plot(x, nb_c / nb_a)\nax.legend()"
6666
]
6767
}
6868
],

notebooks/python_module/10_tracking_diagnostics/pet_propagation.ipynb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
},
2727
"outputs": [],
2828
"source": [
29-
"from matplotlib import pyplot as plt\nfrom py_eddy_tracker.observations.tracking import TrackEddiesObservations\nfrom py_eddy_tracker.generic import cumsum_by_track\nimport py_eddy_tracker_sample\nfrom numpy import arange"
29+
"from matplotlib import pyplot as plt\nfrom py_eddy_tracker.observations.tracking import TrackEddiesObservations\nfrom py_eddy_tracker.generic import cumsum_by_track\nimport py_eddy_tracker_sample\nfrom numpy import arange, ones"
3030
]
3131
},
3232
{
@@ -44,7 +44,7 @@
4444
},
4545
"outputs": [],
4646
"source": [
47-
"a = TrackEddiesObservations.load_file(\n py_eddy_tracker_sample.get_path(\"eddies_med_adt_allsat_dt2018/Anticyclonic.zarr\")\n)\nc = TrackEddiesObservations.load_file(\n py_eddy_tracker_sample.get_path(\"eddies_med_adt_allsat_dt2018/Cyclonic.zarr\")\n)"
47+
"a = TrackEddiesObservations.load_file(\n py_eddy_tracker_sample.get_path(\"eddies_med_adt_allsat_dt2018/Anticyclonic.zarr\")\n)\nc = TrackEddiesObservations.load_file(\n py_eddy_tracker_sample.get_path(\"eddies_med_adt_allsat_dt2018/Cyclonic.zarr\")\n)\nnb_year = (a.period[1] - a.period[0] + 1) / 365.25"
4848
]
4949
},
5050
{
@@ -80,14 +80,14 @@
8080
},
8181
"outputs": [],
8282
"source": [
83-
"d_a = cumsum_by_track(a.distance_to_next(), a.tracks) / 1000.0\nd_c = cumsum_by_track(c.distance_to_next(), c.tracks) / 1000.0"
83+
"i0, nb = a.index_from_track, a.nb_obs_by_track\nd_a = cumsum_by_track(a.distance_to_next(), a.tracks)[(i0 - 1 + nb)[nb != 0]] / 1000.0\ni0, nb = c.index_from_track, c.nb_obs_by_track\nd_c = cumsum_by_track(c.distance_to_next(), c.tracks)[(i0 - 1 + nb)[nb != 0]] / 1000.0"
8484
]
8585
},
8686
{
8787
"cell_type": "markdown",
8888
"metadata": {},
8989
"source": [
90-
"Plot\n\n"
90+
"Setup axes\n\n"
9191
]
9292
},
9393
{
@@ -98,7 +98,7 @@
9898
},
9999
"outputs": [],
100100
"source": [
101-
"fig = plt.figure()\nax_propagation = fig.add_axes([0.05, 0.55, 0.4, 0.4])\nax_cum_propagation = fig.add_axes([0.55, 0.55, 0.4, 0.4])\nax_ratio_propagation = fig.add_axes([0.05, 0.05, 0.4, 0.4])\nax_ratio_cum_propagation = fig.add_axes([0.55, 0.05, 0.4, 0.4])\n\nbins = arange(0, 1500, 10)\ncum_a, bins, _ = ax_cum_propagation.hist(\n d_a, histtype=\"step\", bins=bins, label=\"Anticyclonic\", color=\"r\"\n)\ncum_c, bins, _ = ax_cum_propagation.hist(\n d_c, histtype=\"step\", bins=bins, label=\"Cyclonic\", color=\"b\"\n)\n\nx = (bins[1:] + bins[:-1]) / 2.0\nax_ratio_cum_propagation.plot(x, cum_c / cum_a)\n\nnb_a, nb_c = cum_a[:-1] - cum_a[1:], cum_c[:-1] - cum_c[1:]\nax_propagation.plot(x[1:], nb_a, label=\"Anticyclonic\", color=\"r\")\nax_propagation.plot(x[1:], nb_c, label=\"Cyclonic\", color=\"b\")\n\nax_ratio_propagation.plot(x[1:], nb_c / nb_a)\n\nfor ax in (\n ax_propagation,\n ax_cum_propagation,\n ax_ratio_cum_propagation,\n ax_ratio_propagation,\n):\n ax.set_xlim(0, 1000)\n if ax in (ax_propagation, ax_cum_propagation):\n ax.set_ylim(1, None)\n ax.set_yscale(\"log\")\n ax.legend()\n else:\n ax.set_ylim(0, 2)\n ax.set_ylabel(\"Ratio Cyclonic/Anticyclonic\")\n ax.set_xlabel(\"Propagation (km)\")\n ax.grid()"
101+
"figure = plt.figure(figsize=(12, 8))\nax_ratio_cum = figure.add_axes([0.55, 0.06, 0.42, 0.34])\nax_ratio = figure.add_axes([0.07, 0.06, 0.46, 0.34])\nax_cum = figure.add_axes([0.55, 0.43, 0.42, 0.54])\nax = figure.add_axes([0.07, 0.43, 0.46, 0.54])\nax.set_ylabel(\"Eddies by year\")\nax_ratio.set_ylabel(\"Ratio Cyclonic/Anticyclonic\")\nfor ax_ in (ax, ax_cum, ax_ratio_cum, ax_ratio):\n ax_.set_xlim(0, 1000)\n if ax_ in (ax, ax_cum):\n ax_.set_ylim(1e-1, 1e4), ax_.set_yscale(\"log\")\n else:\n ax_.set_xlabel(\"Propagation in km (with bins of 20 km)\")\n ax_.set_ylim(0, 2)\n ax_.axhline(1, color=\"g\", lw=2)\n ax_.grid()\nax_cum.xaxis.set_ticklabels([]), ax_cum.yaxis.set_ticklabels([])\nax.xaxis.set_ticklabels([]), ax_ratio_cum.yaxis.set_ticklabels([])\n\n# plot data\nbin_hist = arange(0, 2000, 20)\nx = (bin_hist[1:] + bin_hist[:-1]) / 2.0\nw_a, w_c = ones(d_a.shape) / nb_year, ones(d_c.shape) / nb_year\nkwargs_a = dict(histtype=\"step\", bins=bin_hist, x=d_a, color=\"r\", weights=w_a)\nkwargs_c = dict(histtype=\"step\", bins=bin_hist, x=d_c, color=\"b\", weights=w_c)\ncum_a, _, _ = ax_cum.hist(cumulative=-1, **kwargs_a)\ncum_c, _, _ = ax_cum.hist(cumulative=-1, **kwargs_c)\nnb_a, _, _ = ax.hist(label=\"Anticyclonic\", **kwargs_a)\nnb_c, _, _ = ax.hist(label=\"Cyclonic\", **kwargs_c)\nax_ratio_cum.plot(x, cum_c / cum_a)\nax_ratio.plot(x, nb_c / nb_a)\nax.legend()"
102102
]
103103
}
104104
],

0 commit comments

Comments
 (0)