在散景中隐藏注释

hide annotations in bokeh

我有一个散景图,我在其中以 LabelSet 和 BoxAnnotation 的形式添加了一些数据作为叠加层,但我希望能够动态地 enable/disable 这个叠加层。

我可以enable/hide情节中的某些行,但注释系统似乎不同。我已经做到了

正在初始化

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 中

我认为可能有一些管道没有连接到 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)