.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "python_module/16_network/pet_replay_segmentation.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. or to run this example in your browser via Binder .. rst-class:: sphx-glr-example-title .. _sphx_glr_python_module_16_network_pet_replay_segmentation.py: Replay segmentation =================== Case from figure 10 from https://doi.org/10.1002/2017JC013158 Again with the Ierapetra Eddy .. GENERATED FROM PYTHON SOURCE LINES 8-48 .. code-block:: Python from datetime import datetime, timedelta from matplotlib import pyplot as plt from matplotlib.ticker import FuncFormatter from numpy import where from py_eddy_tracker.data import get_demo_path from py_eddy_tracker.gui import GUI_AXES from py_eddy_tracker.observations.network import NetworkObservations from py_eddy_tracker.observations.tracking import TrackEddiesObservations @FuncFormatter def formatter(x, pos): return (timedelta(x) + datetime(1950, 1, 1)).strftime("%d/%m/%Y") def start_axes(title=""): fig = plt.figure(figsize=(13, 6)) ax = fig.add_axes([0.03, 0.03, 0.90, 0.94], projection=GUI_AXES) ax.set_xlim(19, 29), ax.set_ylim(31, 35.5) ax.set_aspect("equal") ax.set_title(title, weight="bold") return ax def timeline_axes(title=""): fig = plt.figure(figsize=(15, 5)) ax = fig.add_axes([0.04, 0.06, 0.89, 0.88]) ax.set_title(title, weight="bold") ax.xaxis.set_major_formatter(formatter), ax.grid() return ax def update_axes(ax, mappable=None): ax.grid(True) if mappable: return plt.colorbar(mappable, cax=ax.figure.add_axes([0.94, 0.05, 0.01, 0.9])) .. GENERATED FROM PYTHON SOURCE LINES 49-52 Class for new_segmentation -------------------------- The oldest win .. GENERATED FROM PYTHON SOURCE LINES 52-92 .. code-block:: Python class MyTrackEddiesObservations(TrackEddiesObservations): __slots__ = tuple() @classmethod def follow_obs(cls, i_next, track_id, used, ids, *args, **kwargs): """ Method to overwrite behaviour in merging. We will give the point to the older one instead of the maximum overlap ratio """ while i_next != -1: # Flag used[i_next] = True # Assign id ids["track"][i_next] = track_id # Search next i_next_ = cls.get_next_obs(i_next, ids, *args, **kwargs) if i_next_ == -1: break ids["next_obs"][i_next] = i_next_ # Target was previously used if used[i_next_]: i_next_ = -1 else: ids["previous_obs"][i_next_] = i_next i_next = i_next_ def get_obs(dataset): "Function to isolate a specific obs" return where( (dataset.lat > 33) * (dataset.lat < 34) * (dataset.lon > 22) * (dataset.lon < 23) * (dataset.time > 20630) * (dataset.time < 20650) )[0][0] .. GENERATED FROM PYTHON SOURCE LINES 93-94 Get original network, we will isolate only relative at order *2* .. GENERATED FROM PYTHON SOURCE LINES 94-97 .. code-block:: Python n = NetworkObservations.load_file(get_demo_path("network_med.nc")).network(651) n_ = n.relative(get_obs(n), order=2) .. GENERATED FROM PYTHON SOURCE LINES 98-99 Display the default segmentation .. GENERATED FROM PYTHON SOURCE LINES 99-107 .. code-block:: Python ax = start_axes(n_.infos()) n_.plot(ax, color_cycle=n.COLORS) update_axes(ax) fig = plt.figure(figsize=(15, 5)) ax = fig.add_axes([0.04, 0.05, 0.92, 0.92]) ax.xaxis.set_major_formatter(formatter), ax.grid() _ = n_.display_timeline(ax) .. rst-class:: sphx-glr-horizontal * .. image-sg:: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_001.png :alt: 1580 obs 16 segments :srcset: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_001.png :class: sphx-glr-multi-img * .. image-sg:: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_002.png :alt: pet replay segmentation :srcset: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_002.png :class: sphx-glr-multi-img .. GENERATED FROM PYTHON SOURCE LINES 108-110 Run a new segmentation ---------------------- .. GENERATED FROM PYTHON SOURCE LINES 110-117 .. code-block:: Python e = n.astype(MyTrackEddiesObservations) e.obs.sort(order=("track", "time"), kind="stable") split_matrix = e.split_network(intern=False, window=7) n_ = NetworkObservations.from_split_network(e, split_matrix) n_ = n_.relative(get_obs(n_), order=2) n_.numbering_segment() .. GENERATED FROM PYTHON SOURCE LINES 118-121 New segmentation ---------------- "The oldest wins" method produce a very long segment .. GENERATED FROM PYTHON SOURCE LINES 121-129 .. code-block:: Python ax = start_axes(n_.infos()) n_.plot(ax, color_cycle=n_.COLORS) update_axes(ax) fig = plt.figure(figsize=(15, 5)) ax = fig.add_axes([0.04, 0.05, 0.92, 0.92]) ax.xaxis.set_major_formatter(formatter), ax.grid() _ = n_.display_timeline(ax) .. rst-class:: sphx-glr-horizontal * .. image-sg:: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_003.png :alt: 861 obs 2 segments :srcset: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_003.png :class: sphx-glr-multi-img * .. image-sg:: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_004.png :alt: pet replay segmentation :srcset: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_004.png :class: sphx-glr-multi-img .. GENERATED FROM PYTHON SOURCE LINES 130-132 Parameters timeline ------------------- .. GENERATED FROM PYTHON SOURCE LINES 132-158 .. code-block:: Python kw = dict(s=35, cmap=plt.get_cmap("Spectral_r", 8), zorder=10) ax = timeline_axes() n_.median_filter(15, "time", "latitude") m = n_.scatter_timeline(ax, "shape_error_e", vmin=14, vmax=70, **kw, yfield="lat") cb = update_axes(ax, m["scatter"]) cb.set_label("Effective shape error") ax = timeline_axes() n_.median_filter(15, "time", "latitude") m = n_.scatter_timeline( ax, "shape_error_e", vmin=14, vmax=70, **kw, yfield="lat", method="all" ) cb = update_axes(ax, m["scatter"]) cb.set_label("Effective shape error") ax.set_ylabel("Latitude") ax = timeline_axes() n_.median_filter(15, "time", "latitude") kw["s"] = (n_.radius_e * 1e-3) ** 2 / 30**2 * 20 m = n_.scatter_timeline( ax, "shape_error_e", vmin=14, vmax=70, **kw, yfield="lon", method="all" ) ax.set_ylabel("Longitude") cb = update_axes(ax, m["scatter"]) cb.set_label("Effective shape error") .. rst-class:: sphx-glr-horizontal * .. image-sg:: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_005.png :alt: pet replay segmentation :srcset: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_005.png :class: sphx-glr-multi-img * .. image-sg:: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_006.png :alt: pet replay segmentation :srcset: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_006.png :class: sphx-glr-multi-img * .. image-sg:: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_007.png :alt: pet replay segmentation :srcset: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_007.png :class: sphx-glr-multi-img .. GENERATED FROM PYTHON SOURCE LINES 159-161 Cost association plot --------------------- .. GENERATED FROM PYTHON SOURCE LINES 161-177 .. code-block:: Python n_copy = n_.copy() n_copy.median_filter(2, "time", "next_cost") for b0, b1 in [ (datetime(i, 1, 1), datetime(i, 12, 31)) for i in (2004, 2005, 2006, 2007, 2008) ]: ref, delta = datetime(1950, 1, 1), 20 b0_, b1_ = (b0 - ref).days, (b1 - ref).days ax = timeline_axes() ax.set_xlim(b0_ - delta, b1_ + delta) ax.set_ylim(0, 1) ax.axvline(b0_, color="k", lw=1.5, ls="--"), ax.axvline( b1_, color="k", lw=1.5, ls="--" ) n_copy.display_timeline(ax, field="next_cost", method="all", lw=4, markersize=8) n_.display_timeline(ax, field="next_cost", method="all", lw=0.5, markersize=0) .. rst-class:: sphx-glr-horizontal * .. image-sg:: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_008.png :alt: pet replay segmentation :srcset: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_008.png :class: sphx-glr-multi-img * .. image-sg:: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_009.png :alt: pet replay segmentation :srcset: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_009.png :class: sphx-glr-multi-img * .. image-sg:: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_010.png :alt: pet replay segmentation :srcset: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_010.png :class: sphx-glr-multi-img * .. image-sg:: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_011.png :alt: pet replay segmentation :srcset: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_011.png :class: sphx-glr-multi-img * .. image-sg:: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_012.png :alt: pet replay segmentation :srcset: /python_module/16_network/images/sphx_glr_pet_replay_segmentation_012.png :class: sphx-glr-multi-img .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 1.991 seconds) .. _sphx_glr_download_python_module_16_network_pet_replay_segmentation.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: binder-badge .. image:: images/binder_badge_logo.svg :target: https://mybinder.org/v2/gh/AntSimi/py-eddy-tracker/master?urlpath=lab/tree/notebooks/python_module/16_network/pet_replay_segmentation.ipynb :alt: Launch binder :width: 150 px .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: pet_replay_segmentation.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: pet_replay_segmentation.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: pet_replay_segmentation.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_