Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,17 @@ of being developed elsewhere.
-----


### Version `3.5.X`, first released 2026-10-09
### Version `3.5.X`, first released XXXXXX

#### Version `3.5.1`, released 2026-??-??

* Update code to prevent deprecation-related warnings
(https://github.com/NCAS-CMS/cf-plot/issues/72)
* Prevent striped artefacts on curvilinear longitude/latitude grids
such as NEMO (https://github.com/NCAS-CMS/cf-plot/issues/126)
* Add new example 'Example 44: NEMO data on a curvilinear T grid'
to the documentation and integration testing
(https://github.com/NCAS-CMS/cf-plot/issues/142)

#### Version `3.5.0`, released 2026-10-09

Expand Down
8 changes: 5 additions & 3 deletions cfplot/blockfill.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,9 +108,11 @@ def _bfill(
colarr[pts] = np.size(levels) - 2

if isinstance(field, np.ma.MaskedArray):
pts = np.ma.where(field.mask)
if np.size(pts) > 0:
colarr[pts] = -1
# np.ma.where on a scalar False mask raises on newer NumPy.
# Use a normalized boolean mask array instead.
mask = np.ma.getmaskarray(field)
if np.any(mask):
colarr[mask] = -1

norm = matplotlib.colors.BoundaryNorm(levels, cmap.N)

Expand Down
101 changes: 94 additions & 7 deletions cfplot/contour.py
Original file line number Diff line number Diff line change
Expand Up @@ -682,7 +682,7 @@ def render_filled(
runtime.image = runtime.mymap.contourf(
lons,
lats,
self.data.field * self.data.fmult,
_mask_curvilinear_contour_seams(self.data) * self.data.fmult,
self.data.levels,
extend=scale.levels_extend,
cmap=cmap,
Expand Down Expand Up @@ -792,10 +792,11 @@ def render_lines(

runtime = plotvars.runtime
dec = plotvars.decoration
field = _mask_curvilinear_contour_seams(self.data) * self.data.fmult
cs = runtime.mymap.contour(
self.data.x,
self.data.y,
self.data.field * self.data.fmult,
field,
self.data.levels,
colors=colors,
linewidths=linewidths,
Expand Down Expand Up @@ -825,7 +826,7 @@ def render_lines(
cs0 = runtime.mymap.contour(
self.data.x,
self.data.y,
self.data.field * self.data.fmult,
field,
[-1e-32, 0],
colors=colors,
linewidths=zero_thick,
Expand Down Expand Up @@ -1697,6 +1698,70 @@ def _window_irregular_map_data(
return field_irregular, lons_irregular, lats_irregular


def _is_curvilinear_map_grid(data: ContourData) -> bool:
"""Return True for map plots using 2D lon/lat coordinates.

Curvilinear grids (for example NEMO/ORCA ocean meshes) are prone to
severe contourf/contour artefacts. These are better rendered through
blockfill/pcolormesh.
"""
if data.ptype != 1 or data.x is None or data.y is None:
return False
if np.ndim(data.field) != 2:
return False
return np.ndim(data.x) == 2 and np.ndim(data.y) == 2


def _mask_curvilinear_contour_seams(data: ContourData) -> np.ndarray:
"""Exclude vertices adjoining longitude jumps from structured contours."""
if not _is_curvilinear_map_grid(data):
return data.field

mask = np.ma.getmaskarray(data.field).copy()
for axis in (0, 1):
jumps = np.abs(np.diff(data.x, axis=axis)) > 180.0
before = [slice(None), slice(None)]
after = before.copy()
before[axis] = slice(None, -1)
after[axis] = slice(1, None)
# Mask both ends so corner masking cannot retain a seam-crossing
# triangle and interpolate a contour across the whole map.
mask[tuple(before)] |= jumps
mask[tuple(after)] |= jumps

return np.ma.array(data.field, mask=mask)


def _resolve_curvilinear_render_defaults(
*,
data: ContourData,
kwargs: dict[str, Any],
fill: bool,
lines: bool,
blockfill: bool,
blockfill_fast: bool | None,
) -> tuple[bool, bool, bool, bool | None]:
"""Adjust renderer defaults for curvilinear lon/lat map grids.

Returns the possibly updated (fill, lines, blockfill, blockfill_fast)
tuple.
"""
if not _is_curvilinear_map_grid(data):
return fill, lines, blockfill, blockfill_fast

# Use robust defaults for 2D map grids unless the caller explicitly
# requested alternative behavior.
if "blockfill" not in kwargs:
blockfill = True
fill = False
if blockfill and blockfill_fast is None:
blockfill_fast = True
if "lines" not in kwargs:
lines = True

return fill, lines, blockfill, blockfill_fast


def _render_with_new_xy(
f: Any, x: Any, y: Any, kwargs: dict[str, Any]
) -> bool:
Expand Down Expand Up @@ -1776,6 +1841,7 @@ def _render_with_new_xy(
fill = kwargs.get("fill", global_fill)
lines = kwargs.get("lines", global_lines)
blockfill = kwargs.get("blockfill", global_blockfill)
blockfill_fast = kwargs.get("blockfill_fast", None)
line_labels = kwargs.get("line_labels", True)
zero_thick = kwargs.get("zero_thick", False)
colors = kwargs.get("colors", "k")
Expand All @@ -1787,6 +1853,17 @@ def _render_with_new_xy(
if blockfill:
fill = False

fill, lines, blockfill, blockfill_fast = (
_resolve_curvilinear_render_defaults(
data=data,
kwargs=kwargs,
fill=fill,
lines=lines,
blockfill=blockfill,
blockfill_fast=blockfill_fast,
)
)

colorbar = kwargs.get("colorbar", True)
if not fill and not blockfill:
colorbar = False
Expand Down Expand Up @@ -2171,7 +2248,7 @@ def _render_with_new_xy(
)
if blockfill:
renderer.render_blockfill(
fast=kwargs.get("blockfill_fast", None), alpha=alpha, zorder=zorder
fast=blockfill_fast, alpha=alpha, zorder=zorder
)
if lines:
renderer.render_lines(
Expand Down Expand Up @@ -2324,7 +2401,7 @@ def _render_with_new_xy(


def con(f=None, x=None, y=None, **kwargs):
"""The interface to contouring in cf-plot.
"""Create a contour or blockfill (or combined contour-blockfill) plot.

The minimum use is con(f)
where f is a 2 dimensional array. If a cf field is passed then an
Expand All @@ -2350,7 +2427,14 @@ def con(f=None, x=None, y=None, **kwargs):
| 6 = rotated pole
| negative_linestyle='solid' - set to one of 'solid', 'dashed'
| zero_thick=False - add a thick zero contour line. Set to 3 for example.
| blockfill=False - set to True for a blockfill plot
| blockfill=False - set to True for a blockfill plot. For 2D lon/lat
| grids, defaults to fast blockfill so blockfill=True.
| For 2D lon/lat grids, defaults to fast blockfill,
| i.e. blockfill=True, fill=False, and
| blockfill_fast=True.
| Explicit False selects contours; vertices adjoining
| longitude wrap jumps are excluded to avoid stripes,
| leaving a narrow gap at the seam.
| colorbar_title=colbar_title - title for the colour bar
| colorbar=True - add a colour bar if a filled contour plot
| colorbar_label_skip=None - skip colour bar labels. Set to 2 to skip
Expand Down Expand Up @@ -2428,7 +2512,10 @@ def con(f=None, x=None, y=None, **kwargs):
| then it is set to True.
| blockfill_fast=None - Use pcolormesh blockfill. This is possibly less
| reliable that the usual code but is
| faster for higher resolution datasets
| faster for higher resolution datasets.
| For 2D lon/lat grids, defaults to fast
| blockfill, i.e. blockfill=True, fill=False and
| blockfill_fast=True.
| nlevs=False - Let Matplotlib work out the levels for the contour plot
| orca=None - User specifies this is an orca tripolar grid. Internally
| cf-plot tries to detect this by looking for a single
Expand Down
Binary file modified docs/_images/ref_fig_1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_10.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_11.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_12.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_13.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_14.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_15.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_16a.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_16b.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_16c.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_17.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_18.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_19a.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_20.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_22.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_27.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_28.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_29.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_30.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_31.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_33.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_34.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_35.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/_images/ref_fig_36.png
Binary file modified docs/_images/ref_fig_37.png
Binary file modified docs/_images/ref_fig_38.png
Binary file modified docs/_images/ref_fig_39.png
Binary file modified docs/_images/ref_fig_39b.png
Binary file modified docs/_images/ref_fig_4.png
Binary file modified docs/_images/ref_fig_40.png
Binary file modified docs/_images/ref_fig_41.png
Binary file modified docs/_images/ref_fig_42a.png
Binary file modified docs/_images/ref_fig_42b.png
Binary file modified docs/_images/ref_fig_5.png
Binary file modified docs/_images/ref_fig_6.png
Binary file modified docs/_images/ref_fig_7.png
Binary file modified docs/_images/ref_fig_8.png
Binary file modified docs/_images/ref_fig_9.png
31 changes: 16 additions & 15 deletions docs/_sources/gallery_of_examples.rst.txt
Original file line number Diff line number Diff line change
Expand Up @@ -40,77 +40,77 @@ by clicking through to the category pages.
:gutter: 1

.. grid-item-card:: Contour plots
:img-top: /../../tests/reference-example-images/ref_fig_1.png
:img-top: /../../tests/v350-controlled-env-ref-images/ref_fig_1.png
:link: cylindrical.html#example-1-basic-contour-plot-in-default-projection
:text-align: center

.. grid-item-card:: Blockfill plots
:img-top: /../../tests/reference-example-images/ref_fig_2.png
:img-top: /../../tests/v350-controlled-env-ref-images/ref_fig_2.png
:link: cylindrical.html#example-2-basic-blockfill-plot-in-default-projection
:text-align: center

.. grid-item-card:: Vector plots
:img-top: /../../tests/reference-example-images/ref_fig_13.png
:img-top: /../../tests/v350-controlled-env-ref-images/ref_fig_13.png
:link: vectors.html#example-13-basic-vector-plot
:text-align: center

.. grid-item-card:: Stream plots
:img-top: /../../tests/reference-example-images/ref_fig_16c.png
:img-top: /../../tests/v350-controlled-env-ref-images/ref_fig_16c.png
:link: vectors.html#example-16c-stream-plot-in-a-colour-scale
:text-align: center

.. grid-item-card:: Stipple plots
:img-top: /../../tests/reference-example-images/ref_fig_17.png
:img-top: /../../tests/v350-controlled-env-ref-images/ref_fig_17.png
:link: stipple_plots.html#example-17-basic-stipple-plot
:text-align: center

.. grid-item-card:: Trajectories
:img-top: /../../tests/reference-example-images/ref_fig_42b.png
:img-top: /../../tests/v350-controlled-env-ref-images/ref_fig_42b.png
:link: trajectories.html#example-42b-tracks-displayed-in-a-colour-scale
:text-align: center

.. grid-item-card:: Hovmöller plots
:img-top: /../../tests/reference-example-images/ref_fig_11.png
:img-top: /../../tests/v350-controlled-env-ref-images/ref_fig_11.png
:link: hovmuller.html#example-11-latitude-time-subset-view-hovmoller-plot
:text-align: center

.. grid-item-card:: Vertical (pressure or height) plots
:img-top: /../../tests/reference-example-images/ref_fig_8.png
:img-top: /../../tests/v350-controlled-env-ref-images/ref_fig_8.png
:link: pressure.html#example-8-latitude-against-log-of-pressure-over-longitude-zonal-mean
:text-align: center

.. grid-item-card:: Lineplots
:img-top: /../../tests/reference-example-images/ref_fig_27.png
:img-top: /../../tests/v350-controlled-env-ref-images/ref_fig_27.png
:link: graphs.html#example-27-basic-line-plot
:text-align: center

.. grid-item-card:: Support for multiple projections
:img-top: /../../tests/reference-example-images/ref_fig_34.png
:img-top: /../../tests/v350-controlled-env-ref-images/ref_fig_34.png
:link: projections.html#example-34-cropping-the-lambert-conformal-conic-lcc-projection
:text-align: center

.. grid-item-card:: Polar projection views
:img-top: /../../tests/reference-example-images/ref_fig_40.png
:img-top: /../../tests/v350-controlled-env-ref-images/ref_fig_40.png
:link: trajectories.html#example-40-tracks-in-the-polar-stereographic-projection
:text-align: center

.. grid-item-card:: Unstructured grids (UGRID) support
:img-top: /../../tests/reference-example-images/ref_fig_24a.png
:img-top: /../../tests/v350-controlled-env-ref-images/ref_fig_24a.png
:link: unstructured.html#example-24a-ugrid-blockfill-plot-with-lfric-cubed-sphere-mesh-output
:text-align: center

.. grid-item-card:: Rotated pole support
:img-top: /../../tests/reference-example-images/ref_fig_22.png
:img-top: /../../tests/v350-controlled-env-ref-images/ref_fig_22.png
:link: rotated_pole.html#example-22-plot-of-rotated-pole-data-on-its-native-grid
:text-align: center

.. grid-item-card:: Multiple plots on one figure
:img-top: /../../tests/reference-example-images/ref_fig_19b.png
:img-top: /../../tests/v350-controlled-env-ref-images/ref_fig_19b.png
:link: multiple_plots.html#example-19b-multiple-plots-with-user-specified-plot-positions
:text-align: center

.. grid-item-card:: Flexible customisation e.g. user-defined axes
:img-top: /../../tests/reference-example-images/ref_fig_21a.png
:img-top: /../../tests/v350-controlled-env-ref-images/ref_fig_21a.png
:link: user_defined.html#example-21a-user-defined-axes
:text-align: center

Expand Down Expand Up @@ -236,6 +236,7 @@ Listing of all examples
examples/example_42a.rst
examples/example_42b.rst
examples/example_43.rst
examples/example_44.rst


.. include:: datasets.rst
2 changes: 1 addition & 1 deletion docs/_sources/plot_types.rst.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@ Plots by type/theme
graphs
projections
trajectories
wrf
specific_models
4 changes: 2 additions & 2 deletions docs/_sources/projections.rst.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
.. _projections:

Projections in cf-plot
**********************
Projections
***********

The cylindrical and polar stereographic projections are detailed
separately in :ref:`cylindrical plots <cylindrical>` and
Expand Down
8 changes: 7 additions & 1 deletion docs/api/con.html
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,13 @@
</div>
<div class="line">negative_linestyle='solid' - set to one of 'solid', 'dashed'</div>
<div class="line">zero_thick=False - add a thick zero contour line. Set to 3 for example.</div>
<div class="line">blockfill=False - set to True for a blockfill plot</div>
<div class="line">blockfill=False - set to True for a blockfill plot. For 2D lon/lat</div>
<div class="line-block">
<div class="line">grids, defaults to fast blockfill without lines.</div>
<div class="line">Explicit False selects contours; vertices adjoining</div>
<div class="line">longitude wrap jumps are excluded to avoid stripes,</div>
<div class="line">leaving a narrow gap at the seam.</div>
</div>
<div class="line">colorbar_title=colbar_title - title for the colour bar</div>
<div class="line">colorbar=True - add a colour bar if a filled contour plot</div>
<div class="line">colorbar_label_skip=None - skip colour bar labels. Set to 2 to skip</div>
Expand Down
4 changes: 2 additions & 2 deletions docs/colour_scales.html
Original file line number Diff line number Diff line change
Expand Up @@ -428,9 +428,9 @@
<li class="toctree-l1"><a class="reference internal" href="rotated_pole.html">Rotated pole plots</a></li>
<li class="toctree-l1"><a class="reference internal" href="unstructured.html">Unstructured grids and UGRID</a></li>
<li class="toctree-l1"><a class="reference internal" href="graphs.html">Line plots i.e. graphs</a></li>
<li class="toctree-l1"><a class="reference internal" href="projections.html">Projections in cf-plot</a></li>
<li class="toctree-l1"><a class="reference internal" href="projections.html">Projections</a></li>
<li class="toctree-l1"><a class="reference internal" href="trajectories.html">Trajectories</a></li>
<li class="toctree-l1"><a class="reference internal" href="wrf.html">WRF data</a></li>
<li class="toctree-l1"><a class="reference internal" href="specific_models.html">Specific Models</a></li>
</ul>
</div>
</nav></div>
Expand Down
4 changes: 2 additions & 2 deletions docs/cylindrical.html
Original file line number Diff line number Diff line change
Expand Up @@ -428,9 +428,9 @@
<li class="toctree-l1"><a class="reference internal" href="rotated_pole.html">Rotated pole plots</a></li>
<li class="toctree-l1"><a class="reference internal" href="unstructured.html">Unstructured grids and UGRID</a></li>
<li class="toctree-l1"><a class="reference internal" href="graphs.html">Line plots i.e. graphs</a></li>
<li class="toctree-l1"><a class="reference internal" href="projections.html">Projections in cf-plot</a></li>
<li class="toctree-l1"><a class="reference internal" href="projections.html">Projections</a></li>
<li class="toctree-l1"><a class="reference internal" href="trajectories.html">Trajectories</a></li>
<li class="toctree-l1"><a class="reference internal" href="wrf.html">WRF data</a></li>
<li class="toctree-l1"><a class="reference internal" href="specific_models.html">Specific Models</a></li>
</ul>
</div>
</nav></div>
Expand Down
1 change: 1 addition & 0 deletions docs/examples/example_1.html
Original file line number Diff line number Diff line change
Expand Up @@ -468,6 +468,7 @@
<li class="toctree-l1"><a class="reference internal" href="example_42a.html">Example 42a: Tracks with labelled data points</a></li>
<li class="toctree-l1"><a class="reference internal" href="example_42b.html">Example 42b: Tracks displayed in a colour scale</a></li>
<li class="toctree-l1"><a class="reference internal" href="example_43.html">Example 43: CF-compliant WRF model output data</a></li>
<li class="toctree-l1"><a class="reference internal" href="example_44.html">Example 44: NEMO data on a curvilinear T grid</a></li>
</ul>
</div>
</nav></div>
Expand Down
1 change: 1 addition & 0 deletions docs/examples/example_10.html
Original file line number Diff line number Diff line change
Expand Up @@ -468,6 +468,7 @@
<li class="toctree-l1"><a class="reference internal" href="example_42a.html">Example 42a: Tracks with labelled data points</a></li>
<li class="toctree-l1"><a class="reference internal" href="example_42b.html">Example 42b: Tracks displayed in a colour scale</a></li>
<li class="toctree-l1"><a class="reference internal" href="example_43.html">Example 43: CF-compliant WRF model output data</a></li>
<li class="toctree-l1"><a class="reference internal" href="example_44.html">Example 44: NEMO data on a curvilinear T grid</a></li>
</ul>
</div>
</nav></div>
Expand Down
1 change: 1 addition & 0 deletions docs/examples/example_11.html
Original file line number Diff line number Diff line change
Expand Up @@ -468,6 +468,7 @@
<li class="toctree-l1"><a class="reference internal" href="example_42a.html">Example 42a: Tracks with labelled data points</a></li>
<li class="toctree-l1"><a class="reference internal" href="example_42b.html">Example 42b: Tracks displayed in a colour scale</a></li>
<li class="toctree-l1"><a class="reference internal" href="example_43.html">Example 43: CF-compliant WRF model output data</a></li>
<li class="toctree-l1"><a class="reference internal" href="example_44.html">Example 44: NEMO data on a curvilinear T grid</a></li>
</ul>
</div>
</nav></div>
Expand Down
1 change: 1 addition & 0 deletions docs/examples/example_12.html
Original file line number Diff line number Diff line change
Expand Up @@ -468,6 +468,7 @@
<li class="toctree-l1"><a class="reference internal" href="example_42a.html">Example 42a: Tracks with labelled data points</a></li>
<li class="toctree-l1"><a class="reference internal" href="example_42b.html">Example 42b: Tracks displayed in a colour scale</a></li>
<li class="toctree-l1"><a class="reference internal" href="example_43.html">Example 43: CF-compliant WRF model output data</a></li>
<li class="toctree-l1"><a class="reference internal" href="example_44.html">Example 44: NEMO data on a curvilinear T grid</a></li>
</ul>
</div>
</nav></div>
Expand Down
Loading
Loading