Bokeh 0.7.1:将绘图动态添加到Bokeh服务器生成的现有页面



我正在使用bokeh服务器处理通过tcp到绘图的数据流,我目前已使用output_server将这些绘图显示到浏览器。我希望能够在数据通过套接字时,向当前浏览器页面动态添加更多绘图。我的部分问题是我不完全理解cursession()和curdoc()是如何工作的/它们有什么不同。

我当前的代码如下:

 plots = []
 if create_new_plot:
      plots.append(create_new_plot_def())
 if open_new_tab:
      show(plots)
      open_new_tab = False
 else:
      curdoc().add(plots)

当我运行此程序时,我得到一个错误,即"list"对象没有属性"references"为了解决这个问题,我似乎必须循环并单独添加每个情节,但这也不起作用。plots[]包含我希望在当前时间显示的所有绘图对象的运行列表。我发现的一个解决方案是每次只使用show(),但每次都会在浏览器中打开一个新的选项卡,这并不实用/优雅。

传统上,我使用cursession().add_object()来更新绘图上的数据源。在我看来,cursession()处理所有的数据后端,而curdoc()控制页面上的实际可视化。这是正确的吗?

有没有一种方法可以让我在同一个现有的浏览器页面上触发一个全新的情节显示,即文档?有人能简单地解释一下如何正确使用cursession()和curdoc()吗?谢谢


编辑:我已经找到了一个解决方案,但仍然无法绕过多次show()调用,这会导致多个浏览器选项卡打开。我的代码现在看起来是这样的:

if open_tab:
     show(grid_plot)
     open_tab = False
else:
    curdoc().clear()
    curdoc().add(grid_plot)
    show()

我在io.py中使用push()找到了一个解决方案

if open_tab:
     show(grid_plot)
     open_tab = False
else:
     curdoc().clear()
     curdoc().add(grid_plot)
     push()

在这样做的过程中,刷新html页面,而不是生成第二个重复页面(新选项卡)。

看看这个:https://groups.google.com/a/continuum.io/d/msg/bokeh/rMDt1sT5Cwk/fkKfS8yeTO8J关于curdoc()与cursession()的解释。请留意即将到来的文档。

最新更新