import intake
import hvplot.pandas
import hvplot.xarray
import cook_inlet_catalogs as cic
import holoviews as hv

Moorings (NPS): across Alaska

Moorings from NPS

cat = intake.open_catalog(cic.utils.cat_path("moorings_nps"))

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
['aguchik-island-ak-tide-station-9', 'chinitna-bay-ak-tide-station-945']

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
aguchik-island-ak-tide-station-9
time latitude longitude z
0 2018-09-11 18:36:00+00:00 58.294639 -154.265611 0.0
1 2018-09-11 18:42:00+00:00 58.294639 -154.265611 0.0
2 2018-09-11 18:48:00+00:00 58.294639 -154.265611 0.0
3 2018-09-11 18:54:00+00:00 58.294639 -154.265611 0.0
4 2018-09-11 19:00:00+00:00 58.294639 -154.265611 0.0
... ... ... ... ...
91665 2019-09-28 17:06:00+00:00 58.294639 -154.265611 0.0
91666 2019-09-28 17:12:00+00:00 58.294639 -154.265611 0.0
91667 2019-09-28 17:18:00+00:00 58.294639 -154.265611 0.0
91668 2019-09-28 17:24:00+00:00 58.294639 -154.265611 0.0
91669 2019-09-28 17:30:00+00:00 58.294639 -154.265611 0.0

91670 rows × 4 columns

Plot 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)
['data']
---------------------------------------------------------------------------
DataError                                 Traceback (most recent call last)
Cell In[6], line 11
      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)

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/stable/lib/python3.11/site-packages/intake/readers/readers.py:121, in BaseReader.read(self, *args, **kwargs)
    119 kw.update(kwargs)
    120 args = kw.pop("args", ()) or args
--> 121 return self._read(*args, **kw)

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/stable/lib/python3.11/site-packages/intake/readers/convert.py:629, in Pipeline._read(self, discover, **kwargs)
    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)

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/stable/lib/python3.11/site-packages/intake/readers/convert.py:615, in Pipeline._read_stage_n(self, stage, discover, **kwargs)
    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:

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/stable/lib/python3.11/site-packages/intake/readers/readers.py:121, in BaseReader.read(self, *args, **kwargs)
    119 kw.update(kwargs)
    120 args = kw.pop("args", ()) or args
--> 121 return self._read(*args, **kw)

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/stable/lib/python3.11/site-packages/intake/readers/convert.py:62, in BaseConverter._read(self, data, *args, **kwargs)
     60 if isinstance(data, BaseReader):
     61     data = data.read()
---> 62 return self.run(data, *args, **kwargs)

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/stable/lib/python3.11/site-packages/intake/readers/convert.py:192, in ToHvPlot.run(self, data, explorer, **kw)
    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)()

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/stable/lib/python3.11/site-packages/hvplot/plotting/core.py:95, in hvPlotBase.__call__(self, x, y, kind, **kwds)
     92         plot = self._get_converter(x, y, kind, **kwds)(kind, x, y)
     93         return pn.panel(plot, **panel_dict)
---> 95 return self._get_converter(x, y, kind, **kwds)(kind, x, y)

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/stable/lib/python3.11/site-packages/hvplot/converter.py:2066, in HoloViewsConverter.__call__(self, kind, x, y)
   2063                 dataset = Dataset(data)
   2064             dataset = redim_(dataset, **self._redim)
-> 2066         obj = method(x, y)
   2067         obj._dataset = dataset
   2069 if self.crs and self.project:
   2070     # Apply projection before rasterizing

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/stable/lib/python3.11/site-packages/hvplot/converter.py:2601, in HoloViewsConverter.line(self, x, y, data)
   2599 def line(self, x=None, y=None, data=None):
   2600     self._error_if_unavailable('line')
-> 2601     return self.chart(Curve, x, y, data)

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/stable/lib/python3.11/site-packages/hvplot/converter.py:2560, in HoloViewsConverter.chart(self, element, x, y, data)
   2558     return self.single_chart(element, x, y, data)
   2559 elif x and y and len(y) == 1:
-> 2560     return self.single_chart(element, x, y[0], data)
   2562 labelled = ['y' if self.invert else 'x'] if x != 'index' else []
   2563 if self.value_label != 'value':

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/stable/lib/python3.11/site-packages/hvplot/converter.py:2431, in HoloViewsConverter.single_chart(self, element, x, y, data)
   2429     chart = chart.layout() if self.subplots else chart.overlay(sort=False)
   2430 else:
-> 2431     chart = relabel(element(data, kdims, vdims), **self._relabel)
   2432 return (
   2433     redim_(chart, **self._redim)
   2434     .opts(cur_opts, backend='bokeh')
   2435     .opts(compat_opts, backend=self._backend_compat)
   2436 )

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/stable/lib/python3.11/site-packages/holoviews/element/selection.py:24, in SelectionIndexExpr.__init__(self, *args, **kwargs)
     23 def __init__(self, *args, **kwargs):
---> 24     super().__init__(*args, **kwargs)
     25     self._index_skip = False

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/stable/lib/python3.11/site-packages/holoviews/element/chart.py:54, in Chart.__init__(self, data, kdims, vdims, **params)
     52 if len(params.get('kdims', [])) == self._max_kdim_count + 1:
     53     self.param.warning('Chart elements should only be supplied a single kdim')
---> 54 super().__init__(data, **params)

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/stable/lib/python3.11/site-packages/holoviews/core/data/__init__.py:338, in Dataset.__init__(self, data, kdims, vdims, **kwargs)
    336 (data, self.interface, dims, extra_kws) = initialized
    337 super().__init__(data, **dict(kwargs, **dict(dims, **extra_kws)))
--> 338 self.interface.validate(self, validate_vdims)
    340 # Handle _pipeline property
    341 if input_pipeline is None:

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/stable/lib/python3.11/site-packages/holoviews/core/data/pandas.py:201, in PandasInterface.validate(cls, dataset, vdims)
    199 not_found = [d for d in dimensions if d not in cols]
    200 if not_found:
--> 201     raise DataError("Supplied data does not contain specified "
    202                     "dimensions, the following dimensions were "
    203                     f"not found: {not_found!r}", cls)

DataError: Supplied data does not contain specified dimensions, the following dimensions were not found: ['sea_surface_height_above_sea_level_geoid_local_station_datum']

PandasInterface expects tabular data, for more information on supported datatypes see https://holoviews.org/user_guide/Tabular_Datasets.html