Bokeh HoverTool无法与multi_line一起使用

问题描述

我要为此撞个头。

bokeh的multip_line和HoverTool似乎不想互相配合。我的问题与此类似:multi_line hover in bokeh。 (旁注:我已经尝试了该问题的解决方代码,但对我而言不起作用,这可能不是一个好兆头。)

在这里有自己的可复制示例代码,从我正在研究的类似热图的图表中浓缩而成:

from bokeh.plotting import figure,output_file,show
from bokeh.models.mappers import LinearColorMapper
from bokeh.models import ColumnDataSource,ColorBar,HoverTool

output_file("heatmap.html")

p = figure(title="multi_line hover failure example")
p.add_tools(HoverTool(
    show_arrow=False,line_policy="nearest",tooltips=[
        ("color","@color"),("name","@name")
    ]))

patch_xs = [[1,2,3],[4,5,6,5],[5,8,8]]
patch_ys = [[1,4,1],[3,3,2],5]]
patch_colors = [1,3]
patch_names = ['robert','quinn','jessy']

line_xs = [[1,8]]
line_ys = [[-1,-2,-4,-1],[-3,-3,-2],[-5,-8,-5]]
line_colors = [-1,-3]
line_names = ['karen','louise','charles']

mapper = LinearColorMapper(
    palette='Turbo256',low=min(patch_colors + line_colors),high=max(patch_colors + line_colors),)

# patches included to confirm that hover is working
# commenting this out does not make hover work
p.patches('xs','ys',line_width=1,color={'field': 'color','transform': mapper},source=ColumnDataSource(dict(
              xs=patch_xs,ys=patch_ys,color=patch_colors,name=patch_names
          ))
          )

p.multi_line('xs',line_width=8,source=ColumnDataSource(dict(
                 xs=line_xs,ys=line_ys,color=line_colors,name=line_names
             )))

p.add_layout(
    ColorBar(
        color_mapper=mapper,location=(0,0)
    ),'left')

show(p)

我的代码生成下面的图形,其中的悬停工具对于填充的形状(如屏幕截图所示)效果很好,但对于线条却效果不佳。相信我,我已经尝试过像游荡的阿拉丁一样四处游荡,试图哄骗一个精灵从它们中脱颖而出。

Bokeh multi_line patch showing hover text

删除填充的形状(面片)并不能解决问题,因此请留下来显示悬停工具的工作原理。

很有趣,根据文档(https://docs.bokeh.org/en/latest/docs/reference/models/tools.html#bokeh.models.tools.HoverTool),HoverTool不适用于补丁程序,但适用于multi_line。 (也许与使用字形代替图形元素有关?)

任何帮助将不胜感激

解决方法

这是一个错误。它已在this commit中修复,应该在Bokeh 2.3中可用。

或者,您可以尝试Bokeh 2.1-IIRC在这里为我工作。