使用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)
这会自动为时间维度创建一个滑块:
如果我看一下创建的对象:
print(row)
我可以看到创建了一个DiscreteSlider
小部件:
Row
[0] Row
[0] HoloViews(DynamicMap)
[1] WidgetBox
[0] DiscreteSlider(name='Time', options=OrderedDict([('2013-01-01 ...]), value=numpy.datetime64('2013-01-...)
用下拉菜单DiscreteSlider
小部件替换Select
小部件的最佳方法是什么?
答案 0 :(得分:4)
要了解如何自定义不同类型的显示输出,必须了解面板如何将提供给它的对象转换为显示pprint输出时看到的对象。具体来说,内部面板将调用pn.panel函数,该函数尝试查找最合适的Pane
对象以呈现您提供的对象。在这种情况下,这是HoloViews
窗格,它负责生成窗口小部件并渲染实际图。换句话说,此代码:
row = pn.Row(mesh)
实际上等同于:
row = pn.Row(pn.panel(mesh))
依次相当于:
row = pn.Row(pn.holoviews.HoloViews(mesh).layout)
一旦您处于用于渲染对象的实际窗格的级别,您将能够看到可用于自定义对象的视觉表示的参数。对于HoloViews
窗格,它提供了一个widgets
参数,该参数允许提供小部件类或实例作为您显示的对象中每个维度的替代。因此,根据您的情况,您想执行以下操作:
pn.holoviews.HoloViews(mesh, widgets={'time': pn.widgets.Select}).layout
或更不明确地显示:
pn.panel(mesh, widgets={'time': pn.widgets.Select})