слайдер не изменит цифры - PullRequest
0 голосов
/ 12 июня 2019

Я использую bokeh для создания фигуры с помощью ползунков, но ползунки не обновят фигуру

У меня есть такой фрейм данных

month = [1,2,3,1,2,3,1,2,3,1,2,3]
tilts = [1,1,1,2,2,2,3,3,3,4,4,4]
data = [0.1,0.2,0.3,1,2,3,11,12,13,21,22,24]
df = pd.DataFrame({'month':month,'tilt':tilts,'data'=data})

df_default = df[df['tilt']==1]

source = ColumnDataSource({
    'x': df_default.month.tolist(), 
    'y': df_default.ac_monthly.tolist(), 
})

plot = figure(plot_width=400, plot_height=400)

plot.line('x', 'y', source=source, line_width=3, line_alpha=0.6)

def update_plot(attr, old, new):
    tilt = slider.value
    df_new = df[df['tilt']==tilt]
    new_data = {
        'x': df_new.month.tolist(), 
        'y': df_new.ac_monthly.tolist(), 
    }
    source.data = new_data

slider = Slider(start=1, end=4, step=1, value=1, title='tilt')
slider.on_change('value',update_plot)

layout = row(
    plot,
    column(slider)
)

output_file("slider.html", title="slider.py example")

show(layout)

И это может дать мне цифры, но как бы я ни менял номер ползунка, фигура не обновится

1 Ответ

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

При запуске этого кода должно быть напечатано громкое предупреждение, разве вы его не видите?Реальные обратные вызовы Python с on_change работают только с сервером Bokeh .(Сервер Bokeh - это именно тот процесс Python, который фактически выполняет ваш код обратного вызова). То, что вы делаете здесь с show и output_file, создает автономный статический HTML-вывод , который не имеет никакого отношения к какому-либоПроцесс Python после того, как он сохранен, и нет возможности запускать реальные обратные вызовы Python.

Для автономного вывода HTML все, что вы можете использовать, это обратные вызовы JavaScript , например, с CustomJS:

slider.js_on_change('value', CustomJS(code="""
    // only JavaScript code here
    console.log(value)
"""))

Если вы хотите запустить реальные обратные вызовы Python,Например, чтобы использовать настоящий код Pandas или Numpy и т. д., вам нужно будет запустить приложение Bokeh Server.Вы можете прочитать все о них в главе Запуск сервера Bokeh в документации.

...