How to use ciso on structured gridsΒΆ

[1]:
import warnings

import iris
import pooch

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

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


with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    cubes = iris.load_raw(fname)

# Last time step.
salt = cubes.extract_cube("sea_water_salinity")[-1, ...]
Downloading data from 'https://github.com/ioos/ciso/releases/download/v0.2.2.post0/Averages_Best_Excluding_Day1.nc' to file '/home/runner/.cache/pooch/7fda05e350e2b6024d65024f525963ce-Averages_Best_Excluding_Day1.nc'.
[2]:
from netCDF4 import Dataset

with Dataset(fname) as nc:
    lon = nc["lon_rho"][:]
    lat = nc["lat_rho"][:]
[3]:
p = salt.coord("sea_surface_height_above_reference_ellipsoid").points
q = salt.data
[4]:
import numpy as np

from ciso import zslice

p0 = -250

isoslice = zslice(q.astype(np.float64), p, p0)
[5]:
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from cartopy.mpl.gridliner import LATITUDE_FORMATTER, LONGITUDE_FORMATTER

extent = [lon.min(), lon.max(), lat.min(), lat.max()]


_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.set_extent(extent)
    ax.coastlines("50m")
    return fig, ax
[6]:
from numpy import ma

fig, ax = make_map()

cs = ax.pcolormesh(lon, lat, ma.masked_invalid(isoslice))

kw = {"shrink": 0.5, "orientation": "vertical", "extend": "both"}
cbar = fig.colorbar(cs, **kw)
_images/ciso_c_grid-output_6_0.png