滑块不会改变数字

时间:2019-06-12 02:09:22

标签: python bokeh

我使用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 :(得分:0)

运行此代码时,您应该得到一个响亮的警告,您看不到吗?带有on_change 的真实Python回调仅适用于Bokeh服务器 。 (Bokeh服务器恰好是实际运行您的回调代码的Python进程)您在showoutput_file处所做的操作正在生成standalone, static HTML output,它与任何Python进程都没有关系保存后,将无法运行真正的Python回调。

对于独立HTML输出,您只能使用javascript callbacks,例如CustomJS

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

如果您想运行真实的Python回调,例如要使用真实的Pandas或Numpy代码等,您将需要运行Bokeh Server Application。您可以在文档的Running a Bokeh Server一章中阅读全部内容。