import intake
import hvplot.pandas
import hvplot.xarray
import cook_inlet_catalogs as cic
import holoviews as hv
Moored ADCP (NOAA): ADCP survey Kodiak Island, Set 2¶
Moored NOAA ADCP surveys in Cook Inlet
ADCP data has been converted to eastward, northward velocities as well as along- and across-channel velocities, in the latter case using the NOAA-provided rotation angle for the rotation. The along- and across-channel velocities are additionally filtered to show the subtidal signal, which is what is plotted in the dataset page.
cat = intake.open_catalog(cic.utils.cat_path("adcp_moored_noaa_kod_2"))
Plot all datasets in catalog¶
dd, ddlabels = cic.utils.combine_datasets_for_map(cat)
dd.hvplot(**cat.metadata["map"]) * ddlabels.hvplot(**cat.metadata["maplabels"])
List available datasets in the catalog¶
dataset_ids = list(cat)
dataset_ids
['KOD0926',
'KOD0927',
'KOD0928',
'KOD0929',
'KOD0930',
'KOD0931',
'KOD0932',
'KOD0933',
'KOD0934',
'KOD0935',
'KOD0936',
'KOD0937',
'KOD0938',
'KOD0939',
'KOD0940',
'KOD0941',
'KOD0942',
'KOD0943',
'KOD0944']
Select one dataset to investigate¶
try:
dataset_id = dataset_ids[2]
except:
dataset_id = dataset_ids[0]
print(dataset_id)
dd = cat[dataset_id].read()
dd
KOD0928
<xarray.Dataset> Size: 10MB
Dimensions: (t: 11007, depth: 22)
Coordinates:
* t (t) datetime64[ns] 88kB 2009-07-17T03:24:00 ... 2009-09-01
* depth (depth) float64 176B 5.64 7.65 9.66 11.64 ... 43.65 45.66 47.64
longitude float64 8B -153.2
latitude float64 8B 58.0
Data variables:
b (t, depth) float64 2MB 22.0 21.0 20.0 19.0 ... 4.0 3.0 2.0 1.0
d (t, depth) float64 2MB 99.0 84.0 76.0 81.0 ... 104.0 106.0 108.0
s (t, depth) float64 2MB 0.178 0.154 0.13 ... 0.197 0.176 0.136
u (t, depth) float64 2MB 0.1758 0.1532 0.1261 ... 0.1692 0.1293
v (t, depth) float64 2MB -0.02785 0.0161 ... -0.04851 -0.04203Plot one dataset¶
keys = list(cat[dataset_id].metadata["plots"].keys())
print(keys)
plots = []
for key in keys:
plot_kwargs = cat[dataset_id].metadata["plots"][key]
if "clim" in plot_kwargs and isinstance(plot_kwargs["clim"], list):
plot_kwargs["clim"] = tuple(plot_kwargs["clim"])
if "dynamic" in plot_kwargs:
plot_kwargs["dynamic"] = False
plots.append(cat[dataset_id].ToHvPlot(**plot_kwargs).read())
hv.Layout(plots).cols(1)
['ualong', 'vacross']
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/xarray/core/dataset.py in ?(self, name)
1230 variable = self._variables[name]
1231 except KeyError:
-> 1232 _, name, variable = _get_virtual_variable(self._variables, name, self.sizes)
1233
KeyError: 'ualong_subtidal'
During handling of the above exception, another exception occurred:
KeyError Traceback (most recent call last)
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/xarray/core/dataset.py:1337, in Dataset.__getitem__(self, key)
1336 try:
-> 1337 return self._construct_dataarray(key)
1338 except KeyError as e:
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/xarray/core/dataset.py:1232, in Dataset._construct_dataarray(self, name)
1231 except KeyError:
-> 1232 _, name, variable = _get_virtual_variable(self._variables, name, self.sizes)
1234 needed_dims = set(variable.dims)
File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/xarray/core/dataset_utils.py:79, in _get_virtual_variable(variables, key, dim_sizes)
78 if len(split_key) != 2:
---> 79 raise KeyError(key)
81 ref_name, var_name = split_key
KeyError: 'ualong_subtidal'
The above exception was the direct cause of the following exception:
KeyError Traceback (most recent call last)
/tmp/ipykernel_3314/1925617574.py in ?()
7 if "clim" in plot_kwargs and isinstance(plot_kwargs["clim"], list):
8 plot_kwargs["clim"] = tuple(plot_kwargs["clim"])
9 if "dynamic" in plot_kwargs:
10 plot_kwargs["dynamic"] = False
---> 11 plots.append(cat[dataset_id].ToHvPlot(**plot_kwargs).read())
12 hv.Layout(plots).cols(1)
~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/intake/readers/readers.py in ?(self, *args, **kwargs)
117 logger.debug("Reading %s", self)
118 kw = self.kwargs.copy()
119 kw.update(kwargs)
120 args = kw.pop("args", ()) or args
--> 121 return self._read(*args, **kw)
~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/intake/readers/convert.py in ?(self, discover, **kwargs)
625 data = None
626 for i, step in enumerate(self.steps):
627 kw = kwargs if i == len(self.steps) else {}
628 if i:
--> 629 data = self._read_stage_n(i, data=data, **kw)
630 else:
631 data = self._read_stage_n(i, discover=discover, **kw)
632 return data
~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/intake/readers/convert.py in ?(self, stage, discover, **kwargs)
611 if isinstance(func, type) and issubclass(func, BaseReader):
612 if discover:
613 return func(metadata=self.metadata).discover(*arg, **kw2)
614 else:
--> 615 return func(metadata=self.metadata).read(*arg, **kw2)
616 elif isinstance(func, BaseReader):
617 if discover:
618 return func.discover(*arg, **kw2)
~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/intake/readers/readers.py in ?(self, *args, **kwargs)
117 logger.debug("Reading %s", self)
118 kw = self.kwargs.copy()
119 kw.update(kwargs)
120 args = kw.pop("args", ()) or args
--> 121 return self._read(*args, **kw)
~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/intake/readers/convert.py in ?(self, data, *args, **kwargs)
58 data = args[0]
59 args = args[1:]
60 if isinstance(data, BaseReader):
61 data = data.read()
---> 62 return self.run(data, *args, **kwargs)
~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/intake/readers/convert.py in ?(self, data, explorer, **kw)
188
189 if explorer:
190 # this is actually a hvplot.ui:hvPlotExplorer and only allows tabular data
191 return hvplot.explorer(data, **kw)
--> 192 return hvplot.hvPlot(data, **kw)()
~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/hvplot/plotting/core.py in ?(self, x, y, kind, **kwds)
91 if panel_dict:
92 plot = self._get_converter(x, y, kind, **kwds)(kind, x, y)
93 return pn.panel(plot, **panel_dict)
94
---> 95 return self._get_converter(x, y, kind, **kwds)(kind, x, y)
~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/hvplot/plotting/core.py in ?(self, x, y, kind, **kwds)
98 params = dict(self._metadata, **kwds)
99 x = x or params.pop('x', None)
100 y = y or params.pop('y', None)
101 kind = kind or params.pop('kind', None)
--> 102 return HoloViewsConverter(self._data, x, y, kind=kind, **params)
~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/hvplot/converter.py in ?(self, data, x, y, kind, by, use_index, group_label, value_label, backlog, persist, use_dask, crs, fields, groupby, dynamic, grid, legend, legend_cols, legend_opts, rot, title, xlim, ylim, clim, robust, symmetric, logx, logy, loglog, hover, hover_cols, hover_formatters, hover_tooltips, subplots, label, invert, stacked, colorbar, cticks, datashade, rasterize, downsample, resample_when, row, col, debug, framewise, aggregator, selector, projection, global_extent, geo, precompute, flip_xaxis, flip_yaxis, dynspread, x_sampling, y_sampling, pixel_ratio, project, toolbar, autohide_toolbar, tools, attr_labels, coastline, tiles, tiles_opts, sort_date, check_symmetric_max, transforms, stream, cnorm, features, rescale_discrete_levels, autorange, subcoordinate_y, backend_opts, **kwds)
931 self._redim = fields
932 self.use_index = use_index
933 self.value_label = value_label
934 self.label = label
--> 935 self._process_data(
936 kind,
937 data,
938 x,
~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/hvplot/converter.py in ?(self, kind, data, x, y, by, groupby, row, col, use_dask, persist, backlog, label, group_label, value_label, hover_cols, attr_labels, transforms, stream, robust, kwds)
1459 z = list(data.data_vars)[0]
1460 else:
1461 z = data.name or label or value_label
1462 if gridded and isinstance(data, xr.Dataset) and not isinstance(z, list):
-> 1463 data = data[z]
1464 self.z = z
1465
1466 ignore = (groupby or []) + (by or []) + grid
~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/xarray/core/dataset.py in ?(self, key)
1346
1347 # If someone attempts `ds['foo' , 'bar']` instead of `ds[['foo', 'bar']]`
1348 if isinstance(key, tuple):
1349 message += f"\nHint: use a list to select multiple variables, for example `ds[{list(key)}]`"
-> 1350 raise KeyError(message) from e
1351
1352 if utils.iterable_of_hashable(key):
1353 return self._copy_listed(key)
KeyError: "No variable named 'ualong_subtidal'. Variables on the dataset include ['b', 'd', 's', 't', 'depth', 'longitude', 'latitude', 'u', 'v']"