2014-12-18 7 views
6

Ho il seguente script di esempio piccolo facendo uso di NumPy e bokeh:HoverTool per la serie di dati multiple nella trama bokeh dispersione

import numpy as np 
import bokeh.plotting as bp 
from bokeh.objects import HoverTool 
bp.output_file('test.html') 

fig = bp.figure(tools="reset,hover") 
x = np.linspace(0,2*np.pi) 
y1 = np.sin(x) 
y2 = np.cos(x) 
s1 = fig.scatter(x=x,y=y1,color='#0000ff',size=10,legend='sine') 
s1.select(dict(type=HoverTool)).tooltips = {"x":"$x", "y":"$y"} 
s2 = fig.scatter(x=x,y=y2,color='#ff0000',size=10,legend='cosine') 
s2.select(dict(type=HoverTool)).tooltips = {"x":"$x", "y":"$y"} 
bp.show() 

Il problema è che lo strumento hover funziona solo per la curva del coseno, ma non per il sine.

So che una possibilità sarebbe quella di tracciare entrambe le serie togehter e cambiare il colore dei punti dati cosine:

import numpy as np 
import bokeh.plotting as bp 
from bokeh.objects import HoverTool 
bp.output_file('test.html') 

fig = bp.figure(tools="reset,hover") 
x = np.linspace(0,2*np.pi) 

y1 = np.sin(x) 
y2 = np.cos(x) 

x = np.array([x,x]).flatten() 
y = np.array([y1,y2]).flatten() 

blue = np.array('#0000ff').flatten() 
red = np.array('#ff0000').flatten() 
colors = np.array([blue.repeat(len(y1)),red.repeat(len(y1))]).flatten() 

s1 = fig.scatter(x=x,y=y,color=colors,size=10,legend='sine & cosine') 
s1.select(dict(type=HoverTool)).tooltips = {"x":"$x", "y":"$y"} 
bp.show() 

Ma poi perdo la voce di legenda per il secondo colore.

Come faccio a essere in grado di passare con il mouse su entrambi i set di dati e visualizzare il suggerimento corrispondente?

Grazie!

Max

risposta

9

Questo è in realtà un bug risolto in master. Mi è stato risolto in questo PR https://github.com/bokeh/bokeh/pull/1511 È possibile installare il nostro accumulo devel contenente la correzione seguente queste istruzioni: http://bokeh.pydata.org/docs/installation.html#developer-builds

Inoltre, sarà necessario modificare il vostro primo codice per utilizzare modelli invece di oggetti nella terza riga , come segue:

import numpy as np 
import bokeh.plotting as bp 
from bokeh.models import HoverTool 
bp.output_file('test.html') 

fig = bp.figure(tools="reset,hover") 
x = np.linspace(0,2*np.pi) 
y1 = np.sin(x) 
y2 = np.cos(x) 
s1 = fig.scatter(x=x,y=y1,color='#0000ff',size=10,legend='sine') 
s1.select(dict(type=HoverTool)).tooltips = {"x":"$x", "y":"$y"} 
s2 = fig.scatter(x=x,y=y2,color='#ff0000',size=10,legend='cosine') 
fig.select(dict(type=HoverTool)).tooltips = {"x":"$x", "y":"$y"} 
bp.show() 

Spero che aiuti!

Cheers.

Damian

aggiornato con commenti qui sotto

+0

Grazie mille! Funziona come un fascino! – Max

+4

Ho ricevuto questo errore: AttributeError: l'oggetto 'generator' non ha attributo 'tooltips'. Ho aggiornato il mio bokeh usando questo comando: pip installa --pre -i https://pypi.anaconda.org/bokeh/channel/dev/simple bokeh --extra-index-url https://pypi.python.org/ simple/ –

+1

Lo stesso problema di Hamid su 0.10 – dranxo

11

Se si desidera avere più strumenti al passaggio del mouse, è necessario aggiungere più strumenti hover, ciascuno configurato per un renderer diverso. Puoi aggiungerli in questo modo:

p = figure() 

r1 = p.circle([1,2,3], [4,5,6], color="blue") 
p.add_tools(HoverTool(renderers=[r1], tooltips=TIPS)) 

r2 = p.square([4,5,6], [1,2,3], color="red") 
p.add_tools(HoverTool(renderers=[r2], tooltips=TIPS))