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

CTD Profiles (USGS BOEM): across Cook Inlet

USGS Cook Inlet fish and bird survey CTD profiles.

CTD profiles collected in Cook Inlet from 2016-2021 by Mayumi Arimitsu as part of BOEM sponsored research on fish and bird distributions in Cook Inlet. The profiles are collected in July for the years 2016-2021.

The scientific project is described here: https://www.usgs.gov/centers/alaska-science-center/science/cook-inlet-seabird-and-forage-fish-study#overview.

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

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
['2016102001',
 '2016106001',
 '2016120001',
 '2016122201',
 '2016123001',
 '2016123002',
 '2016125001',
 '2016126001',
 '2016126002',
 '2016205701',
 '2016206001',
 '2016221001',
 '2016223001',
 '2016223002',
 '2016224001',
 '2016225001',
 '2016226001',
 '2017101001',
 '2017103001',
 '2017120001',
 '2017122001',
 '2017123001',
 '2017124001',
 '2017125001',
 '2017125002',
 '2017201001',
 '2017204001',
 '2017205001',
 '2017206001',
 '2017207001',
 '2017212001',
 '2017214001',
 '2017220001',
 '2017223001',
 '2017224001',
 '2017225001',
 '2018104001',
 '2018120001',
 '2018121001',
 '2018122001',
 '2018123001',
 '2018124001',
 '2018125001',
 '2018126001',
 '2018203001',
 '2018203002',
 '2018205001',
 '2018208001',
 '2018214002',
 '2018221001',
 '2018223001',
 '2018223002',
 '2018225001',
 '2019106001',
 '2019121001',
 '2019122001',
 '2019123001',
 '2019125001',
 '2019126001',
 '2019205001',
 '2019210001',
 '2019221001',
 '2019223001',
 '2019223002',
 '2019226001',
 '2021105001',
 '2021122001',
 '2021123001',
 '2021124001',
 '2021125001',
 '2021126001',
 '2021205001',
 '2021210001',
 '2021221001',
 '2021223001',
 '2021223002',
 '2021224001',
 '2021226001']

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
2016120001
date_time station_number location ctd_latitude ctd_longitude pressure temp C0Sm DzdtM Par Sbeox0MgL Sbeox0PS SvCM CStarAt0 CStarTr0 salt FlECOAFL TurbWETntu0 Ph OxsatMgL
0 2016-07-17 08:33:00 2016120001 Kalgin Island 60.30618 -152.19212 1 13.3170 3.337872 -0.063 768.000000 NaN NaN 1492.57 1.1178 75.6201 27.6436 1.0242 1.7943 9.070 8.80512
1 2016-07-17 08:33:00 2016120001 Kalgin Island 60.30618 -152.19212 2 13.3214 3.336830 0.679 343.000000 NaN NaN 1492.60 1.1350 75.2960 27.6244 1.2115 1.9996 9.070 8.80501
2 2016-07-17 08:33:00 2016120001 Kalgin Island 60.30618 -152.19212 3 13.3134 3.336744 0.766 195.000000 NaN NaN 1492.60 1.1468 75.0747 27.6291 1.2266 1.9545 9.072 8.80624
3 2016-07-17 08:33:00 2016120001 Kalgin Island 60.30618 -152.19212 4 13.3086 3.336873 0.827 113.000000 NaN NaN 1492.59 1.1625 74.7853 27.6369 1.2101 1.9931 9.073 8.80691
4 2016-07-17 08:33:00 2016120001 Kalgin Island 60.30618 -152.19212 5 13.3061 3.337038 1.059 73.400000 NaN NaN 1492.62 1.2420 73.3089 27.6367 1.1938 2.1567 9.075 8.80720
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
62 2016-07-17 08:33:00 2016120001 Kalgin Island 60.30618 -152.19212 63 12.4617 3.386520 0.732 0.000015 NaN NaN 1491.95 3.9815 36.9784 28.7044 0.9993 9.8916 9.189 8.90686
63 2016-07-17 08:33:00 2016120001 Kalgin Island 60.30618 -152.19212 64 12.4581 3.386749 0.874 0.000028 NaN NaN 1491.96 4.5403 32.2270 28.7119 1.0523 10.4878 9.189 8.90729
64 2016-07-17 08:33:00 2016120001 Kalgin Island 60.30618 -152.19212 65 12.4601 3.386667 0.882 0.000019 NaN NaN 1491.98 4.6604 31.2080 28.7095 1.0470 10.1999 9.194 8.90706
65 2016-07-17 08:33:00 2016120001 Kalgin Island 60.30618 -152.19212 66 12.4604 3.386730 0.727 0.000009 NaN NaN 1492.00 4.3089 34.0654 28.7060 1.0759 9.9825 9.195 8.90700
66 2016-07-17 08:33:00 2016120001 Kalgin Island 60.30618 -152.19212 67 12.4550 3.387197 0.055 0.000022 NaN NaN 1492.00 4.0479 36.5550 28.7163 1.0347 13.3594 9.202 8.90758

67 rows × 20 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']
---------------------------------------------------------------------------
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