隐藏Bokeh中的注释

4

我有一个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中,红色框都停留在原地。
1个回答

5
我认为BokehJS侧可能存在一些未连接的管道来响应visible。如果是这样,那就是一个bug。请在项目问题跟踪器中创建一个带有所有信息的问题。
同时,您可以通过操纵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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接