我正在使用bokeh-server通过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()
答案 0 :(得分:2)
我在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()vs cursession()的解释。请留意即将发布的文档。