问题描述
我要为此撞个头。
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)
我的代码生成下面的图形,其中的悬停工具对于填充的形状(如屏幕截图所示)效果很好,但对于线条却效果不佳。相信我,我已经尝试过像游荡的阿拉丁一样四处游荡,试图哄骗一个精灵从它们中脱颖而出。
删除填充的形状(面片)并不能解决问题,因此请留下来显示悬停工具的工作原理。
很有趣,根据文档(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在这里为我工作。