我有一个Bokeh图,其中我添加了一些数据作为LabelSet和BoxAnnotation的叠加层,但我希望能够动态启用/禁用此叠加层。
我可以启用/隐藏绘图中的某些线条(已经实现),但注释的系统似乎不同。我已经做到了这一点
初始化
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()
小部件生成
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控制台时,if/else子句按预期触发,因此
Toggle
可以工作,但无论是在Firefox还是IE中,红色框都停留在原地。