我写了一个函数,它基本上进行一些计算,并返回一个Bokeh plot对象。在
然后我调用该函数来向用户显示一些初始输出。在那之后,我有一个功能,在那里检查更新。 我还有一个Select,这样用户就可以选择他/她想要的选项。最后,我在更新情节。在
代码结构如下:
plot = my_custom_function(dataset, 'input_parameter')
def update_plot(attr, old, new):
if new == 'some_other':
plot = my_custom_function(dataset, new)
else:
plot = my_custom_function(dataset, old)
select = Select(title='Charging Station', options=['the_first', 'some_other'], value='the_first')
select.on_change('value', update_plot)
layout = row(select, plot)
curdoc().add_root(layout)
问题是,图表没有更新?有什么问题吗?在
这里有很多事情要提:
首先,您是在Bokeh服务器上运行这个,即
bokeh serve maypp.py
?真正的Python回调(例如使用on_change
)只在Bokeh服务器中工作(Bokeh服务器是实际运行回调代码的Python进程)你的回拨,如前所述,没有任何效果。将赋值给只存在于回调函数内的局部变量
plot
,然后在函数结束时立即消失。您实际上没有更新任何内容,因此整个回调都是不可操作的。回调需要做的是修改您之前所做的绘图,例如通过更新现有的数据源。一个典型的Bokeh应用程序的结构如下:所有的example apps in repository都遵循这种模式。
最后要提到的是,让尽可能小的改变总是100%的最佳实践。一、 e.您应该更新现有数据源的
.data
,而不是用新的数据源(或绘图)替换整个数据源。Bokeh针对这种更新进行了优化。在相关问题 更多 >
编程相关推荐