Python Bokeh绘图在Select更改时不更新

2024-03-29 13:25:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个函数,它基本上进行一些计算,并返回一个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)

问题是,图表没有更新?有什么问题吗?在


Tags: the函数用户newplotmycustomupdate
1条回答
网友
1楼 · 发布于 2024-03-29 13:25:04

这里有很多事情要提:

  • 首先,您是在Bokeh服务器上运行这个,即bokeh serve maypp.py?真正的Python回调(例如使用on_change)只在Bokeh服务器中工作(Bokeh服务器是实际运行回调代码的Python进程)

  • 你的回拨,如前所述,没有任何效果。将赋值给只存在于回调函数内的局部变量plot,然后在函数结束时立即消失。您实际上没有更新任何内容,因此整个回调都是不可操作的。回调需要做的是修改您之前所做的绘图,例如通过更新现有的数据源。一个典型的Bokeh应用程序的结构如下:

    source = ColumnDataSource(...)
    p = figure(...)
    p.line(..., source=source)
    
    def update(attr, old, new):
        source.data = some_new_data  # Update the *existing* data source
        p.title.text = "new title"   # Update properties on *existing* objects
    
    select = Select(...)
    select.on_change('value', update)
    

    所有的example apps in repository都遵循这种模式。

最后要提到的是,让尽可能小的改变总是100%的最佳实践。一、 e.您应该更新现有数据源的.data,而不是用新的数据源(或绘图)替换整个数据源。Bokeh针对这种更新进行了优化。在

相关问题 更多 >