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)