You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bokeh使用multi_line实现可单独交互多图例条目的方法问询

问题解答

Bokeh的multi_line目前无法实现「单条曲线独立通过图例控制显隐/静音」的需求。核心原因是multi_line是单个Glyph渲染对象,所有曲线共享同一个渲染器配置,不管用legend_group生成多少个图例条目,都会绑定到同一个渲染器,交互必然是整体生效的,这是底层设计决定的,没有参数可以绕过这个限制。

你需要的效果只能通过循环逐个绘制Line对象实现,这种方式只要曲线数量不是极端多(数千条以上),性能和multi_line差异极小,还支持给每条线单独配置样式,灵活度更高。修改后的参考代码如下:

import numpy as np
import bokeh.plotting as bok
from bokeh.io import curdoc, show

N = 9
x = np.linspace(-2, 2, N)
y = x**2

xpts = np.array([-.09, -.12, .0, .12,  .09])
ypts = np.array([-.1,   .02, .1, .02, -.1])

# 提前计算所有曲线的坐标和标签
all_xs = [xpts*(1+i/10.0)+xx for i, xx in enumerate(x)]
all_ys = [ypts*(1+i/10.0)+yy for i, yy in enumerate(y)]
labels = [str(i) for i in range(N)]

fig = bok.figure(tools = "pan,box_zoom,wheel_zoom,reset", plot_width=500, plot_height=800)

# 循环逐个绘制单条曲线,每个曲线对应独立渲染器
for xs, ys, label in zip(all_xs, all_ys, labels):
    fig.line(x=xs, y=ys, line_color="#8073ac", line_width=2, muted_alpha=0.1, legend_label=label)

fig.legend.click_policy = 'mute'

curdoc().add_root(fig)
show(fig)

内容的提问来源于stack exchange,提问作者cznfrt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:09:02