Mostrar solo una información sobre herramientas al usar la herramienta HoverTool ()

Estoy trazando muchos puntos en Bokeh, y he agregado HoverTool a la lista de herramientas de la figura, de modo que el mouse muestre las coordenadas x,y del mouse cuando esté cerca de un glifo.

Cuando el ratón se acerca a un conjunto de glifos estrechamente agrupados, recibo tantas informaciones sobre herramientas como glifos. En cambio, solo quiero una información sobre herramientas, la del glifo más cercano. Esto no es solo un detalle de la presentación, porque en muchos puntos esto resulta:

  • en interacción lenta con la ttwig, con el navegador atascado mientras se generan todas las informaciones sobre herramientas
  • en una información sobre herramientas muy larga, donde la misma información se repite tantas veces como muchos glifos están cerca del cursor

Sigue un ejemplo, con el código para replicar el comportamiento: introduzca la descripción de la imagen aquí

 import numpy.random from bokeh.plotting import figure, output_notebook, show from bokeh.models import HoverTool output_notebook() hover = HoverTool() hover.tooltips = [("(x,y)", "($x, $y)")] x = numpy.random.randn(500) y = numpy.random.randn(500) p = figure(tools=[hover]) p.circle(x,y, color='red', size=14, alpha=0.4) show(p) 

Estaba teniendo un problema similar y se me ocurrió una solución utilizando una información sobre herramientas personalizada. Inserto una etiqueta de estilo en la parte superior que solo muestra el primer div hijo en la clase .bk-tooltip , que es la primera información sobre herramientas.

Aquí hay un ejemplo de trabajo:

 from bokeh.plotting import figure, show from bokeh.models import HoverTool, Range1d custom_hover = HoverTool() custom_hover.tooltips = """  X:  @x 
Y: @y """ p = figure(tools=[custom_hover]) #Custom behavior #p = figure(tools=['hover']) #Default behavior p.circle(x=[0.75,0.75,1.25,1.25], y=[0.75,1.25,0.75,1.25], size=230, color='red', fill_alpha=0.2) p.y_range = Range1d(0,2) p.x_range = Range1d(0,2) show(p)

Esta es una especie de solución pirata, pero funciona en Safari, Firefox y Chrome. Creo que pronto saldrán con una solución más a largo plazo.

Felicitaciones a pst0101 por una excelente respuesta, que aún funciona hasta 2018. Como los desarrolladores no parecen estar llegando a este pronto, pensé en añadir una breve nota sobre cómo hacer que la solución de pst funcione para información sobre herramientas básica / estándar , ya que me tomó un poco de prueba y error modificarlo por mi cuenta.

Como el código vale más que mil palabras, aquí hay una versión reducida de mi propia versión:

 hoverToolTip = [ ("Item" + nbs + "Number/s", "@{ItemNumber}"), ("Description/s", "@{Description}{safe}"), ("Virtual" + nbs + "Item", """@{IsVirtual} """) ] hover = HoverTool(tooltips=hoverToolTip) 

nbs contiene una cadena Unicode de un espacio sin interrupciones y {safe} le dice a bokeh que es seguro procesar html (específicamente, saltos de línea) de mi campo de descripción. Es irrelevante para la pregunta, pero es útil ya que hover tiene algunos comportamientos de envoltura rotos con texto largo que muchas personas necesitarán tratar.