How to use ciso on unstructured gridsΒΆ

[1]:
import warnings

import iris
import pooch

fname = "NECOFS_GOM3_FORECAST.nc"
version = "v0.2.2.post0"
url = f"https://github.com/ioos/ciso/releases/download/{version}/{fname}"

fname = pooch.retrieve(
    url,
    known_hash="sha256:05589ca949e112f60b6a8ca1ac0eb1f1c6239659b4443151731a177135fe58d0",
)


with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    cubes = iris.load_raw(fname)
Downloading data from 'https://github.com/ioos/ciso/releases/download/v0.2.2.post0/NECOFS_GOM3_FORECAST.nc' to file '/home/runner/.cache/pooch/9c4b68fb11876bd3d409003c22c81edb-NECOFS_GOM3_FORECAST.nc'.
[2]:
salt = cubes.extract_cube("sea_water_salinity")[-1, ...]

lon = salt.coord(axis="X").points
lat = salt.coord(axis="Y").points
[3]:
p = salt.coord("sea_surface_height_above_reference_ellipsoid").points
q = salt.data
[4]:
import numpy as np

from ciso import zslice

p0 = -25
isoslice = zslice(q, p, -50)
[5]:
from numpy import ma

# Cannot tricontourf with NaNs.
isoslice = ma.masked_invalid(isoslice)
vmin, vmax = isoslice.min(), isoslice.max()
isoslice = isoslice.filled(fill_value=-999)
[6]:
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from cartopy.mpl.gridliner import LATITUDE_FORMATTER, LONGITUDE_FORMATTER

_plate_carree = ccrs.PlateCarree()


def make_map(projection=_plate_carree):
    fig, ax = plt.subplots(
        figsize=(9, 13),
        subplot_kw={"projection": projection},
    )
    gl = ax.gridlines(draw_labels=True)
    gl.right_labels = gl.top_labels = False
    gl.xformatter = LONGITUDE_FORMATTER
    gl.yformatter = LATITUDE_FORMATTER
    ax.coastlines("50m")
    return fig, ax
[7]:
import gridgeo

grid = gridgeo.GridGeo(fname, standard_name="sea_water_salinity")
[8]:
fig, ax = make_map()
extent = [lon.min(), lon.max(), lat.min(), lat.max()]
ax.set_extent(extent)

levels = np.linspace(vmin, vmax, 20)

kw = {"alpha": 0.9, "levels": levels}
cs = ax.tricontourf(grid.triang, isoslice, **kw)

kw = {"shrink": 0.5, "orientation": "vertical"}
cbar = fig.colorbar(cs, **kw)
/home/runner/work/ciso/ciso/.pixi/envs/py314/lib/python3.14/site-packages/cartopy/io/__init__.py:241: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/50m_physical/ne_50m_coastline.zip
  warnings.warn(f'Downloading: {url}', DownloadWarning)
_images/ciso_unstructure-output_8_1.png