如何在散景中隐藏跨度线

How to Hide Span Lines in Bokeh

我有一个带有散点图和线图以及许多跨度线的散景图。线图可以很容易地通过图例隐藏,但如何隐藏跨线?我想单击各个跨度线以将其静音或完全隐藏。如何做到这一点?

我想展示的解决方案是对 的改编,其中复选框用于切换行。这也可以用于 Span。

from bokeh.io import output_notebook, show
from bokeh.models import Span, CheckboxGroup, CustomJS
from bokeh.plotting import figure
from bokeh.layouts import row
output_notebook()

p = figure(width=300, height=300)
p.line(x=[1,2,3,4,5], y=[1,2,3,4,5], line_width=2, legend_label='Line')
s = []
span_positions = [2.5,3.5]
for pos in span_positions:
    s.append(Span(dimension='height', location=pos))
p.renderers.extend(s)

checkbox = CheckboxGroup(
    labels=['Span_'+str(i) for i in span_positions], 
    active=list(range(len(span_positions))), 
    width=100
)
callback = CustomJS(args=dict(spans=s,checkbox=checkbox),
    code="""
    for(var i=0; i<spans.length; i++){
        spans[i].visible = checkbox.active.includes(i);
    }
    """
)
checkbox.js_on_change('active', callback)
layout = row(p,checkbox)
show(layout)

输出

评论

我试图将 Spans 添加到图例中以避免 CheckBox,但我无法做到,因为来自 bokeh 的 LegendItem 不接受 Spans。所以这可能并不理想。