How can I get the bokeh hover tool to snap to the data?

a 夏天 提交于 2019-12-12 16:38:50

问题


I would like the bokeh hover tool to snap to the data points instead of interpolating the mouse position on the line. Here's the code that I thought would do it, but I'm still getting interpolated data in the display.

from bokeh.plotting import figure, output_file, show
from bokeh.models import HoverTool

# prepare some data
x = [0.1, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0]
y0 = [i**2 for i in x]
y1 = [10**i for i in x]
y2 = [10**(i**2) for i in x]

# output to static HTML file
output_file("log_lines.html")

hover = HoverTool(tooltips=[
    ("index", "$index"),
    ("(x,y)", "(@x, @y)"),
    ("desc", "@desc"),
])
hover.point_policy='snap_to_data'
hover.line_policy='none'

# create a new plot
p = figure(
   tools="pan,box_zoom,reset,save,hover",
   y_axis_type="log", y_range=[0.001, 10**11], title="log axis example",
   x_axis_label='sections', y_axis_label='particles'
)

# add some renderers
p.line(x, x, legend="y=x")
p.circle(x, x, legend="y=x", fill_color="white", size=8)
p.line(x, y0, legend="y=x^2", line_width=3)
p.line(x, y1, legend="y=10^x", line_color="red")
p.circle(x, y1, legend="y=10^x", fill_color="red", line_color="red", size=6)
p.line(x, y2, legend="y=10^x^2", line_color="orange", line_dash="4 4")

# show the results
show(p)

回答1:


You're not passing your custom HoverTool instance to the plot. You need to do:

...
p = figure(tools="pan,box_zoom,reset,save",
           y_axis_type="log", y_range=[0.001, 10**11], title="log axis example",
           x_axis_label='sections', y_axis_label='particles')
p.add_tools(hover) # this is your custom HoverTool
...


来源:https://stackoverflow.com/questions/44953670/how-can-i-get-the-bokeh-hover-tool-to-snap-to-the-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!