【问题标题】:Python Bokeh - Plot not updating when Select is changedPython Bokeh - 更改选择时绘图不更新
【发布时间】:2019-08-21 23:03:16
【问题描述】:

我编写了一个函数,它基本上进行一些计算并返回一个散景图对象。

然后我调用该函数向用户显示一些初始输出。之后,我有一个功能可以检查更新。 我也有一个选择,所以用户可以选择他/她想要的选项。最后,我正在更新剧情。

代码结构如下:

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)

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

【问题讨论】:

    标签: python bokeh


    【解决方案1】:

    这里有很多事情要提到:

    • 首先,您是否使用 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% 的最佳实践。 IE。您应该更新现有数据源的.data,而不是用新数据源替换整个数据源(或绘图)。 Bokeh 针对这种更新进行了优化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-16
      • 1970-01-01
      相关资源
      最近更新 更多