Вернуть значение виджета слайдера Panel - PullRequest
0 голосов
/ 27 июня 2019

Я использую виджет-слайдер Panel для проверки некоторых данных и хочу использовать значения этого виджета в качестве аргумента других функций. Я построил свой собственный код на основе этого:

import hvplot.pandas
import panel as pn
import holoviews as hv

from bokeh.sampledata.sea_surface_temperature import sea_surface_temperature

pn.extension()

bins = pn.widgets.IntSlider(name='Number of bins', start=5, end=25, step=5, value=10)
kde = pn.widgets.Checkbox(name='Show density estimate')
observations = pn.widgets.Checkbox(name='Show individual observations')
bandwidth = pn.widgets.FloatSlider(name='KDE Bandwidth', start=0.1, end=1)

@pn.depends(bins.param.value, kde.param.value,
            observations.param.value, bandwidth.param.value)
def get_plot(bins, kde, obs, bw):
    plot = sea_surface_temperature.hvplot.hist(bins=bins, normed=True, xlabel='Temperature (C)', padding=0.1)
    if kde:
        plot *= sea_surface_temperature.hvplot.kde().opts(bandwidth=bw)
    if obs:
        plot *= hv.Spikes(sea_surface_temperature, 'temperature').opts(
            line_width=0.1, alpha=0.1, spike_length=-0.01)
    return plot

widgets = pn.WidgetBox('## Sea surface temperatures', bins, observations, kde)

def add_bandwidth(event):
    if event.new:
        widgets.append(bandwidth)
    else:
        widgets.remove(bandwidth)

kde.param.watch(add_bandwidth, 'value')

pn.Row(widgets, get_plot).servable()

Если поставить вопрос в контексте предыдущего кода, я бы хотел использовать значение bin. Для этого я изменил окончательный вывод на:

output = (pn.Row(widgets, get_plot).servable(), bins)

Выполнение output[1] показывает график, но output[2] показывает виджет слайдера вместо выбранного целого числа.

Если я изменю вывод функции get_plot на return (plot,bins), на последнем графике будет показан виджет плюс то же, что и у print(plot) вместо гистограммы.

Вот источник кода, который я использовал для разработки своего: https://panel.pyviz.org/gallery/simple/temperature_distribution.html#gallery-temperature-distribution

1 Ответ

0 голосов
/ 29 июня 2019

Вы определили bins как виджет, поэтому, естественно, он показывает виджет.

В вашем случае, bins.value, вероятно, то, что вы ищете, следуя документам здесь: https://panel.pyviz.org/user_guide/Widgets.html

...