Каков наилучший способ изменить тип виджета в объекте hvplot / holoviews / panel? - PullRequest
0 голосов
/ 27 февраля 2019

Используя функциональность pyviz , легко создать интерактивную панель управления hvplot / panel для набора данных с сеткой xarray , как в этом примере данных о температуре воздуха:

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)

, который автоматически создает ползунок для измерения времени:

enter image description here

Если я взгляну на созданный объект:

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 виджет?

1 Ответ

0 голосов
/ 27 февраля 2019

Чтобы понять, как настроить вывод на экран различных типов, вы должны понимать, как панель преобразует объекты, которые вы ей даете, в объекты, которые вы видите при отображении вывода на экран 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})

select_widget

...