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