2016-08-16 20 views
6

Tôi muốn làm mới tài liệu bokeh để tôi có thể thay thế các ô cũ bằng ô mới. Tuy nhiên, ngay bây giờ tôi chỉ nhận được các lô mới được nối vào tài liệu để các tài liệu cũ không biến mất.Cách làm mới Tài liệu 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) 

Kết quả này trong lô thứ hai được hiển thị sau ô đầu tiên, mặc dù hành vi mong muốn là ô thứ hai thay thế ô đầu tiên. Làm cách nào tôi có thể giải quyết vấn đề này? Tôi đang chạy trên máy chủ bokeh thông qua dịch vụ bokeh - hiển thị myfile.py

Trả lời

5

Cách tốt nhất để thực hiện điều gì đó như thế này là có bố cục cấp cao nhất (ví dụ: row hoặc column) có nội dung bạn muốn thay thế bên trong nó. Sau đó, khi bạn muốn thay thế mọi thứ, giữ container bố trí, nhưng thay đổi giá trị tài sản children của nó:

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 

Bạn có thể thấy một kỹ thuật tương tự trong Crossfilter example.

2

Chỉ trong trường hợp bất kỳ ai đang gặp khó khăn về cách đặt con cho bố cục khi có nhiều yếu tố (ví dụ: tiện ích con, số liệu, hàng v.v.), bạn có thể làm như vậy bằng cách bao bọc các phần tử trong bố cục và gán trẻ em tài sản trực tiếp:

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 
Các vấn đề liên quan