Hi,
I am trying to make a plot where I have dynamic selection of time and property using datashader.
The code below returns error for datashade = True
. It is important to create widgets for the property and time as I want to use them in other plots that I want to overlay.
import xarray as xr
import numpy as np
import hvplot.xarray #noqa
import panel as pn
n = 200
x = xr.DataArray(np.arange(-n / 2, n / 2), dims = ["x"])
y = xr.DataArray(np.arange(-n / 2, n / 2), dims = ["y"])
t = xr.DataArray(np.arange(0, 1, 0.01), dims = ["t"])
r = (np.cos(2 * np.pi * t / 0.6) * np.sqrt(x**2 + y**2)).rename("r")
z = (np.cos(2 * np.pi * t / 0.6) * np.exp(-2 * r ** 2 / 1e4) * (np.sin(2 * np.pi * y / 50) + np.sin(2 * np.pi * x / 50))).rename("z")
ds = xr.merge([r, z]).assign_coords(x = x, y = y, t = t)
v_options = pn.widgets.Select(options = list(ds))
t_slider = pn.widgets.DiscreteSlider(name = 'Time', options = ds.t.values.tolist())
plot = ds.interactive()[v_options].sel(t = t_slider).hvplot(x = "x", y = "y", datashade = False)
Any idea on how to do that?
My plan is to use v_options
and t_slider
in other xarray.dataset
objects to create other plots
to overlay. It is important to use datashader because the data is too big and I want it to be interactively changing.
Error message:
ERROR:tornado.application:Exception in callback functools.partial(<bound method IOLoop._discard_future_result of <tornado.platform.asyncio.AsyncIOMainLoop object at 0x7f4c6a86dd60>>, <Task finished name='Task-6291' coro=<WSHandler._async_open() done, defined at /home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/bokeh/server/views/ws.py:181> exception=Exception('Nesting a DynamicMap inside a DynamicMap is not supported. Ensure that the DynamicMap callback returns an Element or (Nd)Overlay. If you have applied an operation ensure it is not dynamic by setting dynamic=False.')>)
Traceback (most recent call last):
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/tornado/ioloop.py", line 740, in _run_callback
ret = callback()
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/tornado/ioloop.py", line 764, in _discard_future_result
future.result()
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/bokeh/server/views/ws.py", line 202, in _async_open
await self.application_context.create_session_if_needed(session_id, self.request, token)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/bokeh/server/contexts.py", line 240, in create_session_if_needed
self._application.initialize_document(doc)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/panel/io/server.py", line 409, in initialize_document
super().initialize_document(doc)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/bokeh/application/application.py", line 190, in initialize_document
h.modify_document(doc)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/bokeh/application/handlers/function.py", line 140, in modify_document
self._func(doc)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/panel/io/server.py", line 152, in _eval_panel
doc = as_panel(panel)._modify_doc(server_id, title, doc, location)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/panel/viewable.py", line 315, in _modify_doc
return self.server_doc(doc, title, location) # type: ignore
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/panel/viewable.py", line 1024, in server_doc
model = self.get_root(doc)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/panel/pane/base.py", line 425, in get_root
root_view, root = self._get_root_model(doc, comm, preprocess)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/panel/pane/base.py", line 350, in _get_root_model
root = self.layout._get_model(doc, comm=comm)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/panel/layout/base.py", line 174, in _get_model
objects, _ = self._get_objects(model, [], doc, root, comm)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/panel/layout/base.py", line 156, in _get_objects
child = pane._get_model(doc, root, model, comm)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/panel/pane/holoviews.py", line 721, in _get_model
model = self._layout_panel._get_model(doc, root, parent, comm)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/panel/layout/base.py", line 174, in _get_model
objects, _ = self._get_objects(model, [], doc, root, comm)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/panel/layout/base.py", line 156, in _get_objects
child = pane._get_model(doc, root, model, comm)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/panel/layout/base.py", line 174, in _get_model
objects, _ = self._get_objects(model, [], doc, root, comm)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/panel/layout/base.py", line 156, in _get_objects
child = pane._get_model(doc, root, model, comm)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/panel/pane/holoviews.py", line 411, in _get_model
plot = self._render(doc, comm, root)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/panel/pane/holoviews.py", line 506, in _render
return renderer.get_plot(self.object, **kwargs)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/holoviews/plotting/bokeh/renderer.py", line 68, in get_plot
plot = super().get_plot(obj, doc, renderer, **kwargs)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/holoviews/plotting/renderer.py", line 226, in get_plot
obj = collate(obj)
File "/home/iury/miniforge3/envs/coringa/lib/python3.9/site-packages/holoviews/plotting/util.py", line 78, in collate
raise Exception("Nesting a %s inside a DynamicMap is not "
Exception: Nesting a DynamicMap inside a DynamicMap is not supported. Ensure that the DynamicMap callback returns an Element or (Nd)Overlay. If you have applied an operation ensure it is not dynamic by setting dynamic=False.