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

CTD Profiles (EMAP 2008)

CTD Profiles in Cook Inlet

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

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
['AKCI08-001',
 'AKCI08-002',
 'AKCI08-003',
 'AKCI08-004',
 'AKCI08-005',
 'AKCI08-007',
 'AKCI08-008',
 'AKCI08-009',
 'AKCI08-011',
 'AKCI08-012',
 'AKCI08-013',
 'AKCI08-015',
 'AKCI08-016',
 'AKCI08-017',
 'AKCI08-018',
 'AKCI08-021',
 'AKCI08-023',
 'AKCI08-024',
 'AKCI08-026',
 'AKCI08-027',
 'AKCI08-028',
 'AKCI08-029',
 'AKCI08-031',
 'AKCI08-032',
 'AKCI08-033',
 'AKCI08-035',
 'AKCI08-037A',
 'AKCI08-037B',
 'AKCI08-039',
 'AKCI08-040',
 'AKCI08-041',
 'AKCI08-042',
 'AKCI08-043',
 'AKCI08-044',
 'AKCI08-045',
 'AKCI08-047',
 'AKCI08-048',
 'AKCI08-049',
 'AKCI08-050',
 'AKCI08-051',
 'AKCI08-052',
 'AKCI08-054',
 'AKCI08-055',
 'AKCI08-056',
 'AKCI08-057',
 'AKCI08-058',
 'AKCI08-059',
 'AKCI08-060',
 'AKCI08-061',
 'AKCI08-063',
 'AKCI08-065',
 'AKCI08-066',
 'AKCI08-067',
 'AKCI08-069',
 'AKCI08-070',
 'AKCI08-071',
 'AKCI08-072',
 'AKCI08-073',
 'AKCI08-074',
 'AKCI08-076',
 'AKCI08-079',
 'AKCI08-080',
 'AKCI08-081',
 'AKCI08-083',
 'AKCI08-084',
 'AKCI08-086',
 'AKCI08-087',
 'AKCI08-088',
 'KB01',
 'KB02',
 'KB03',
 'KB04',
 'KB05',
 'KRM']

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
AKCI08-003
StationID Lat Lon Depth (m) Temperature Salinity (PSU) Oxygen (mg/L) datetime
0 AKCI08-003 60.51125 -151.852233 1.0 11.922 26.792 8.572 2008-08-14 14:51:00
1 AKCI08-003 60.51125 -151.852233 1.5 11.918 26.796 8.573 2008-08-14 14:51:00
2 AKCI08-003 60.51125 -151.852233 2.0 11.916 26.798 8.584 2008-08-14 14:51:00
3 AKCI08-003 60.51125 -151.852233 2.5 11.915 26.800 8.584 2008-08-14 14:51:00
4 AKCI08-003 60.51125 -151.852233 3.0 11.909 26.806 8.565 2008-08-14 14:51:00
5 AKCI08-003 60.51125 -151.852233 3.5 11.906 26.813 8.580 2008-08-14 14:51:00
6 AKCI08-003 60.51125 -151.852233 4.0 11.903 26.816 8.563 2008-08-14 14:51:00
7 AKCI08-003 60.51125 -151.852233 4.5 11.899 26.824 8.569 2008-08-14 14:51:00
8 AKCI08-003 60.51125 -151.852233 5.0 11.890 26.835 8.559 2008-08-14 14:51:00
9 AKCI08-003 60.51125 -151.852233 5.5 11.876 26.857 8.552 2008-08-14 14:51:00
10 AKCI08-003 60.51125 -151.852233 6.0 11.854 26.886 8.550 2008-08-14 14:51:00
11 AKCI08-003 60.51125 -151.852233 6.5 11.838 26.908 8.548 2008-08-14 14:51:00
12 AKCI08-003 60.51125 -151.852233 7.0 11.818 26.930 8.521 2008-08-14 14:51:00
13 AKCI08-003 60.51125 -151.852233 7.5 11.805 26.943 8.537 2008-08-14 14:51:00
14 AKCI08-003 60.51125 -151.852233 8.0 11.795 26.955 8.534 2008-08-14 14:51:00
15 AKCI08-003 60.51125 -151.852233 8.5 11.781 26.973 8.532 2008-08-14 14:51:00
16 AKCI08-003 60.51125 -151.852233 9.0 11.779 26.977 8.505 2008-08-14 14:51:00
17 AKCI08-003 60.51125 -151.852233 9.5 11.776 26.978 8.528 2008-08-14 14:51:00

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']
---------------------------------------------------------------------------
ValueError                                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/latest/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/latest/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/latest/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/latest/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/latest/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/latest/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/latest/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/latest/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/latest/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/latest/lib/python3.11/site-packages/hvplot/converter.py:2588, in HoloViewsConverter.chart(self, element, x, y, data)
   2586 charts = []
   2587 for c in y:
-> 2588     ydim = hv.Dimension(c, label=self.value_label)
   2589     kdims, vdims = self._get_dimensions([x], [ydim])
   2590     chart = element(data, kdims, vdims)

File ~/checkouts/readthedocs.org/user_builds/cook-inlet-catalogs/conda/latest/lib/python3.11/site-packages/holoviews/core/dimension.py:285, in Dimension.__init__(self, spec, **params)
    283     raise ValueError('Dimension name cannot be empty')
    284 if not all_params['label']:
--> 285     raise ValueError('Dimension label cannot be empty')
    287 values = params.get('values', [])
    288 if isinstance(values, str) and values == 'initial':

ValueError: Dimension label cannot be empty