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)