Bokeh HoverTool 不适用于 multi_line

Bokeh HoverTool not working with multi_line

我正在努力解决这个问题。

Bokeh 的 multip_line 和 HoverTool 似乎不太友好。我的问题与此类似:。 (旁注:我已经尝试了那个问题的解决方案代码,但它对我不起作用,这可能不是一个好兆头。)

我在这里有我自己的可重现示例代码,从我正在处理的类似热图的情节中浓缩而来:

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, 2, 3], [4, 5, 6, 5], [5, 5, 8, 8]]
patch_ys = [[1, 2, 4, 1], [3, 4, 3, 2], [5, 8, 8, 5]]
patch_colors = [1, 2, 3]
patch_names = ['robert', 'quinn', 'jessy']

line_xs = [[1, 2, 2, 3], [4, 5, 6, 5], [5, 5, 8, 8]]
line_ys = [[-1, -2, -4, -1], [-3, -4, -3, -2], [-5, -8, -8, -5]]
line_colors = [-1, -2, -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', 'ys', line_width=8,
             color={'field': 'color', 'transform': mapper},
             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)

我的代码生成了下图,其中悬停工具适用于填充的形状(如屏幕截图所示)但不适用于线条。相信我,我试过将鼠标放在所有的线条上,就像一个疯狂的阿拉丁试图哄一个精灵从它们中出来。

删除填充的形状(补丁)并不能解决问题,因此将它们留在其中以显示悬停工具应该如何工作。

有趣的是,根据文档 (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,它在那里为我工作。