如何在散景中的 LegendItem 上创建工作回调?

How to create working callback on LegendItem in bokeh?

当渲染器的 visible 属性发生变化时,我想在 LegendLegendItem 上调用 CustomJS 回调。

我有这个最小的例子:

from bokeh.plotting import figure, show, output_notebook
from bokeh.models import CustomJS, Legend
output_notebook()

p = figure(width=300, height=300, tools='pan')

p.add_layout(Legend(click_policy='hide'))

p.line([1,2,3,4,5], [1,2,3,4,5], legend_label="a")
p.legend.items[0].js_on_change("visible", CustomJS(code="""console.log("Output LegendItem")"""))
p.x_range.js_on_change("start", CustomJS(code="""console.log("Output XRange")"""))

show(p)

当我使用 PanTool 时,我可以看到文本 "Output XRange"。如果我单击图例并隐藏该行,则日志不会显示任何消息。

如果 Legend 被点击或 LegendItems 隐藏,如何修改代码调用回调?

when the visible attribute of a renderer changes

在这种情况下,您应该直接在渲染器的 visible 属性 上设置回调,而不是尝试通过图例进行一些间接路由。

r = p.line(...)
r.js_on_change("visible", CustomJS(...))