我使用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)
这可以给我数字,但是无论我如何更改滑块的数量,数字都不会刷新
答案 0 :(得分:0)
运行此代码时,您应该得到一个响亮的警告,您看不到吗?带有on_change
的真实Python回调仅适用于Bokeh服务器 。 (Bokeh服务器恰好是实际运行您的回调代码的Python进程)您在show
和output_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一章中阅读全部内容。