2016-08-16 18 views
6

Chciałbym odświeżyć dokument Bokeh, aby móc wymienić stare działki na nowe. Jednak teraz po prostu dostaję nowe działki dołączone do dokumentu, więc stare nie znikną.Jak odświeżyć dokument Bokeh

#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) 

Wynika to w drugiej działki są wyświetlane po pierwszym działki, choć oczekiwane zachowanie szukam to druga fabuła zastępując pierwszą działkę. Jak mogę to rozwiązać? Uruchamiam to na serwerze bokeh przez bokeh serve --show myfile.py

Odpowiedz

5

Najlepszym sposobem na osiągnięcie czegoś takiego jest posiadanie pewnego rodzaju układu najwyższego poziomu (np. row lub column), który ma zawartość chcesz go zastąpić. Potem, gdy chcesz wymienić rzeczy, trzymać pojemnik na układ, ale zmienić wartość jego children własności:

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 

Można zobaczyć podobną technikę w Crossfilter example.

2

Na wszelki wypadek, gdy ktoś stara się ustawić dzieci w układach, gdy istnieje wiele elementów (np. Widżety, więcej figur, wierszy itp.), Można to zrobić, zawijając elementy w układzie i przypisując dzieciom własność bezpośrednio:

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