我想刷新散景文档,以便用新的替换旧的图。 但是,现在我只是将新的图表附加到文档中,以便旧的图表不会消失。
#myfile.py
from bokeh.plotting import curdoc, figure
doc = curdoc()
p1 = figure(width=1500, height=230, active_scroll="wheel_zoom")
doc.add_root(p1)
doc.clear()
p2 = figure(width=1500, height=500, active_scroll="wheel_zoom")
doc.add_root(p2)
这导致第二个绘图显示在第一个绘图之后,尽管我正在寻找的预期行为是替换第一个绘图的第二个绘图。我该如何解决这个问题?我通过散景服务--show myfile.py
在散景服务器上运行它答案 0 :(得分:8)
实现此类目标的最佳方法是使某种类型的顶级布局(例如row
或column
)具有您要在其中替换的内容。然后当你想要替换东西时,保留布局容器,但是改变它的children
属性的值:
from bokeh.plotting import curdoc, figure
from bokeh.layouts import row
doc = curdoc()
p1 = figure(width=1500, height=230, active_scroll="wheel_zoom")
layout = row(p1)
doc.add_root(layout)
p2 = figure(width=1500, height=500, active_scroll="wheel_zoom")
layout.children[0] = p2
您可以在Crossfilter example中看到类似的技巧。
答案 1 :(得分:4)
如果有多个元素(例如,小部件,更多图形,行等),任何人都在努力设置子画面布局,可以通过将元素包装在布局中并指定子属性来实现。直接:
p2 = figure(width=1500, height=500, active_scroll="wheel_zoom")
p3 = figure(width=1500, height=500, active_scroll="wheel_zoom")
new_layout = row(p2, p3)
layout.children = new_layout.children