2016-11-28 4 views
3

У меня есть участок Bokeh, где я добавляю некоторые данные в виде LabelSet и BoxAnnotation в качестве наложения, но я хочу иметь возможность динамически включать/отключать этот оверлей.скрывать аннотации в bokeh

Я могу включить/скрыть некоторые из строк на графике already, но система для аннотаций, похоже, отличается. У меня до сих пор уже

Инициализация
from ipywidgets import interact 
from bokeh.plotting import figure as bf 
from bokeh.layouts import layout as bl 
from bokeh.models import Toggle, BoxAnnotation, CustomJS 
from bokeh.io import push_notebook, show, output_notebook 
output_notebook() 

поколение Widget

p = bf(title='test', x_range=(0,1), y_range=(0,1)) 
x = [1/3, 2/3] 
y=[1/3, 2/3] 
p.circle(x=x, y=y, size=15) 

box = BoxAnnotation(left=None, right=0.5, fill_color='red', fill_alpha=0.1) 

p.add_layout(box) 

Интерактивность
code = '''\ 
if toggle.active 
    box.visible = true 
    console.log 'enabling box' 
else 
    box.visible = false 
    console.log 'disabling box' 
''' 
callback = CustomJS.from_coffeescript(code=code, args={}) 
toggle = Toggle(label="Red Box", button_type="success", callback=callback) 
callback.args = {'toggle': toggle, 'box': box} 

layout = bl([p], [toggle]) 
show(layout) 

Когда я проверяю консоль JS, то если/иначе пункты получить срабатывает как и ожидалось, поэтому работает Toggle, но красный ящик остается на месте, как в Firefox, так и в IE

ответ

4

Я думаю, что может быть какая-то сантехника, которая не подключена на стороне BokehJS, чтобы ответить на visible. Если это так, это ошибка. Пожалуйста, укажите проблему со всей этой информацией в Project Issue Tracker.

В то же время, вы можете добиться того же визуального эффекта, манипулируя alpha значения вместо:

code = '''\ 
if toggle.active 
    box.fill_alpha = 0.1 
    box.line_alpha = 1 
    console.log 'enabling box' 
else 
    box.fill_alpha = 0 
    box.line_alpha = 0 
    console.log 'disabling box' 
''' 
callback = CustomJS.from_coffeescript(code=code, args={}) 
toggle = Toggle(label="Red Box", button_type="success", callback=callback) 
callback.args = {'toggle': toggle, 'box': box} 

layout = bl([p], [toggle]) 
show(layout)