@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?