Simple Panel example of map/time series interaction for data cube?

@jbednar, this works great, but if I change the slider widget to “Select” using widgets={'time':pn.widgets.Select} thusly, it bombs:

import panel as pn
import numpy as np
import xarray as xr
import holoviews as hv
import hvplot.xarray

pn.extension()

ds = xr.tutorial.open_dataset('air_temperature')
image = ds.hvplot('lon', 'lat', widgets={'time':pn.widgets.Select})
stream = hv.streams.Tap(source=image, x=-88 + 360, y=40)

def timeseries(x, y):
    return ds.sel(lon=x, lat=y, method='nearest').hvplot('time')

pn.Column(image, pn.bind(timeseries, x=stream.param.x, y=stream.param.y))

with the error:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/home/conda/store/5413108540ec5590442f729933018374edec0237f31b6b39bdb179c9e72aa025-pangeo/lib/python3.7/site-packages/IPython/core/formatters.py in __call__(self, obj, include, exclude)
    968 
    969             if method is not None:
--> 970                 return method(include=include, exclude=exclude)
    971             return None
    972         else:

/home/conda/store/5413108540ec5590442f729933018374edec0237f31b6b39bdb179c9e72aa025-pangeo/lib/python3.7/site-packages/panel/viewable.py in _repr_mimebundle_(self, include, exclude)
    571         doc = _Document()
    572         comm = state._comm_manager.get_server_comm()
--> 573         model = self._render_model(doc, comm)
    574         ref = model.ref['id']
    575         manager = CommManager(comm_id=comm.id, plot_id=ref)

/home/conda/store/5413108540ec5590442f729933018374edec0237f31b6b39bdb179c9e72aa025-pangeo/lib/python3.7/site-packages/panel/viewable.py in _render_model(self, doc, comm)
    422         if comm is None:
    423             comm = state._comm_manager.get_server_comm()
--> 424         model = self.get_root(doc, comm)
    425 
    426         if config.embed:

/home/conda/store/5413108540ec5590442f729933018374edec0237f31b6b39bdb179c9e72aa025-pangeo/lib/python3.7/site-packages/panel/viewable.py in get_root(self, doc, comm, preprocess)
    480         """
    481         doc = init_doc(doc)
--> 482         root = self._get_model(doc, comm=comm)
    483         if preprocess:
    484             self._preprocess(root)

/home/conda/store/5413108540ec5590442f729933018374edec0237f31b6b39bdb179c9e72aa025-pangeo/lib/python3.7/site-packages/panel/layout/base.py in _get_model(self, doc, root, parent, comm)
    110         if root is None:
    111             root = model
--> 112         objects = self._get_objects(model, [], doc, root, comm)
    113         props = dict(self._init_properties(), objects=objects)
    114         model.update(**self._process_param_change(props))

/home/conda/store/5413108540ec5590442f729933018374edec0237f31b6b39bdb179c9e72aa025-pangeo/lib/python3.7/site-packages/panel/layout/base.py in _get_objects(self, model, old_objects, doc, root, comm)
    100             else:
    101                 try:
--> 102                     child = pane._get_model(doc, root, model, comm)
    103                 except RerenderError:
    104                     return self._get_objects(model, current_objects[:i], doc, root, comm)

/home/conda/store/5413108540ec5590442f729933018374edec0237f31b6b39bdb179c9e72aa025-pangeo/lib/python3.7/site-packages/panel/layout/base.py in _get_model(self, doc, root, parent, comm)
    110         if root is None:
    111             root = model
--> 112         objects = self._get_objects(model, [], doc, root, comm)
    113         props = dict(self._init_properties(), objects=objects)
    114         model.update(**self._process_param_change(props))

/home/conda/store/5413108540ec5590442f729933018374edec0237f31b6b39bdb179c9e72aa025-pangeo/lib/python3.7/site-packages/panel/layout/base.py in _get_objects(self, model, old_objects, doc, root, comm)
    100             else:
    101                 try:
--> 102                     child = pane._get_model(doc, root, model, comm)
    103                 except RerenderError:
    104                     return self._get_objects(model, current_objects[:i], doc, root, comm)

/home/conda/store/5413108540ec5590442f729933018374edec0237f31b6b39bdb179c9e72aa025-pangeo/lib/python3.7/site-packages/panel/pane/holoviews.py in _get_model(self, doc, root, parent, comm)
    239             plot = self.object
    240         else:
--> 241             plot = self._render(doc, comm, root)
    242 
    243         plot.pane = self

/home/conda/store/5413108540ec5590442f729933018374edec0237f31b6b39bdb179c9e72aa025-pangeo/lib/python3.7/site-packages/panel/pane/holoviews.py in _render(self, doc, comm, root)
    304                 kwargs['comm'] = comm
    305 
--> 306         return renderer.get_plot(self.object, **kwargs)
    307 
    308     def _cleanup(self, root):

/home/conda/store/5413108540ec5590442f729933018374edec0237f31b6b39bdb179c9e72aa025-pangeo/lib/python3.7/site-packages/holoviews/plotting/bokeh/renderer.py in get_plot(self_or_cls, obj, doc, renderer, **kwargs)
     71         combining the bokeh model with another plot.
     72         """
---> 73         plot = super(BokehRenderer, self_or_cls).get_plot(obj, doc, renderer, **kwargs)
     74         if plot.document is None:
     75             plot.document = Document() if self_or_cls.notebook_context else curdoc()

/home/conda/store/5413108540ec5590442f729933018374edec0237f31b6b39bdb179c9e72aa025-pangeo/lib/python3.7/site-packages/holoviews/plotting/renderer.py in get_plot(self_or_cls, obj, doc, renderer, comm, **kwargs)
    234                 obj = Layout(obj)
    235             plot = self_or_cls.plotting_class(obj)(obj, renderer=renderer,
--> 236                                                    **plot_opts)
    237             defaults = [kd.default for kd in plot.dimensions]
    238             init_key = tuple(v if d is None else d for v, d in

/home/conda/store/5413108540ec5590442f729933018374edec0237f31b6b39bdb179c9e72aa025-pangeo/lib/python3.7/site-packages/holoviews/plotting/bokeh/raster.py in __init__(self, *args, **kwargs)
     72 
     73     def __init__(self, *args, **kwargs):
---> 74         super(RasterPlot, self).__init__(*args, **kwargs)
     75         if self.hmap.type == Raster:
     76             self.invert_yaxis = not self.invert_yaxis

/home/conda/store/5413108540ec5590442f729933018374edec0237f31b6b39bdb179c9e72aa025-pangeo/lib/python3.7/site-packages/holoviews/plotting/bokeh/element.py in __init__(self, element, plot, **params)
    204         self.handles = {} if plot is None else self.handles['plot']
    205         self.static = len(self.hmap) == 1 and len(self.keys) == len(self.hmap)
--> 206         self.callbacks = self._construct_callbacks()
    207         self.static_source = False
    208         self.streaming = [s for s in self.streams if isinstance(s, Buffer)]

/home/conda/store/5413108540ec5590442f729933018374edec0237f31b6b39bdb179c9e72aa025-pangeo/lib/python3.7/site-packages/holoviews/plotting/plot.py in _construct_callbacks(self)
    952         for source in self.link_sources:
    953             streams = [
--> 954                 s for src, streams in registry for s in streams
    955                 if src is source or (src._plot_id is not None and
    956                                      src._plot_id == source._plot_id)]

/home/conda/store/5413108540ec5590442f729933018374edec0237f31b6b39bdb179c9e72aa025-pangeo/lib/python3.7/site-packages/holoviews/plotting/plot.py in <listcomp>(.0)
    953             streams = [
    954                 s for src, streams in registry for s in streams
--> 955                 if src is source or (src._plot_id is not None and
    956                                      src._plot_id == source._plot_id)]
    957             cb_classes |= {(callbacks[type(stream)], stream) for stream in streams

AttributeError: 'Row' object has no attribute '_plot_id'
Column
    [0] Row
        [0] HoloViews(DynamicMap, widgets={'time': <class '...})
        [1] Column
            [0] WidgetBox
                [0] Select(margin=(20, 20, 20, 20), name='Time', options=OrderedDict([('2013-01-01 ...]), value=numpy.datetime64('2013-01-..., width=250)
            [1] VSpacer()
    [1] ParamFunction(function)

Am I doing this wrong or is it a bug?