在hvplot / holoviews / panel对象中更改窗口小部件类型的最佳方法是什么?

Ric*_*ell 5 python holoviews pyviz

使用pyviz中的功能,可以很容易地为栅格化的xarray数据集生成一个hvplot/ panel交互式仪表板,例如下面的气温数据示例:

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)
Run Code Online (Sandbox Code Playgroud)

它会自动为时间维度创建一个滑块:

在此处输入图片说明

如果我看一下创建的对象:

print(row)
Run Code Online (Sandbox Code Playgroud)

我可以看到DiscreteSlider创建了一个小部件:

Row
    [0] Row
        [0] HoloViews(DynamicMap)
        [1] WidgetBox
            [0] DiscreteSlider(name='Time', options=OrderedDict([('2013-01-01 ...]), value=numpy.datetime64('2013-01-...)
Run Code Online (Sandbox Code Playgroud)

DiscreteSlider用下拉菜单Select小部件替换小部件的最佳方法是什么?

phi*_*jfr 6

若要了解如何自定义不同类型的显示输出,您必须了解面板如何将提供给它的对象转换为显示pprint输出时看到的对象。具体来说,内部面板将调用pn.panel函数,该函数尝试找到最合适的Pane对象来呈现您提供的对象。在这种情况下,该HoloViews窗格负责生成窗口小部件并渲染实际图。换句话说,此代码:

row = pn.Row(mesh)
Run Code Online (Sandbox Code Playgroud)

实际上等效于:

row = pn.Row(pn.panel(mesh))
Run Code Online (Sandbox Code Playgroud)

依次等效于:

row = pn.Row(pn.holoviews.HoloViews(mesh).layout)
Run Code Online (Sandbox Code Playgroud)

一旦处于用于渲染对象的实际窗格的级别,您将能够看到可用于自定义对象的视觉表示的参数。对于HoloViews窗格,它提供了一个widgets参数,该参数允许提供窗口小部件类或实例作为所显示对象中每个维度的替代。因此,在您的情况下,您想执行以下操作:

pn.holoviews.HoloViews(mesh, widgets={'time': pn.widgets.Select}).layout
Run Code Online (Sandbox Code Playgroud)

或更明确地:

pn.panel(mesh, widgets={'time': pn.widgets.Select})
Run Code Online (Sandbox Code Playgroud)

select_widget