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
相关产品推荐
相关产品推荐

