Using the functionality in pyviz, it's easy to generate an hvplot/panel interactive dashboard for a gridded xarray dataset, like this air temperature data example:
import xarray as xr
import hvplot.xarray
import panel as pn
airtemps = xr.tutorial.load_dataset('air_temperature')
atemp = airtemps.air[:10,:,:]
mesh = atemp.hvplot(groupby='time')
row = pn.Row(mesh)
display(row)
which automatically creates a slider for the time dimension:

If I take a look at the object created:
print(row)
I can see that a DiscreteSlider widget was created:
Row
[0] Row
[0] HoloViews(DynamicMap)
[1] WidgetBox
[0] DiscreteSlider(name='Time', options=OrderedDict([('2013-01-01 ...]), value=numpy.datetime64('2013-01-...)
What is the best way to replace the DiscreteSlider widget with a drop down menu Select widget?
To understand how to customize the display output of different types you have to understand how panel transform the objects that you give it into the objects that you see when displaying the pprint output. Specifically, internally panel will call the pn.panel function which tries to find the most appropriate Pane object to render what you gave it. In this case that is the HoloViews pane which is responsible for generating the widgets and for rendering the actual plot. In other words this code:
row = pn.Row(mesh)
is actually equivalent to:
row = pn.Row(pn.panel(mesh))
which in turn is equivalent to:
row = pn.Row(pn.holoviews.HoloViews(mesh).layout)
Once you are at the level of the actual Pane used to render the object you will be able to see the parameters available to customize the visual representation of the object. In the case of the HoloViews pane it offers a widgets parameter which allows supplying widget classes or instances as overrides for each of the dimensions in the object you are displaying. In your case you therefore want to do something like this:
pn.holoviews.HoloViews(mesh, widgets={'time': pn.widgets.Select}).layout
or less explicitly:
pn.panel(mesh, widgets={'time': pn.widgets.Select})

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With