2014-12-18 10 views
6

Ich habe folgendes kleines Beispiel Skript Verwendung von numpy und Bokeh machen:HoverTool für mehrere Datenreihe in Bokeh Streudiagramm

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() 

Das Problem ist, dass das Hover-Tool nur für die Kosinus-Kurve arbeitet, aber nicht für die Sinus.

Ich weiß, dass eine Option beiden Serien togehter zu plotten wäre und die Farbe der Punkte Kosinusdaten ändern:

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() 

Aber dann verliere ich die Legende Eintrag für die zweite Farbe.

Wie kann ich den Mauszeiger über beide Datensätze bewegen und den entsprechenden Tooltip sehen?

Danke!

Max

Antwort

9

Dies ist eigentlich ein Fehler im Master gelöst. Ich war in dieser PR festen https://github.com/bokeh/bokeh/pull/1511 Sie unseren Entwick Build im Anschluss an diesen Anweisungen, um das Update installieren können enthalten: http://bokeh.pydata.org/docs/installation.html#developer-builds

Außerdem müssen Sie Ihren ersten Code modifizieren Modelle statt Objekte verwenden in der dritten Zeile , wie folgt:

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() 

Hoffe es hilft!

Prost.

Damian

AKTUALISIERT mit Kommentaren unten

+0

Vielen Dank! Klappt wunderbar! – Max

+4

Ich habe diesen Fehler: AttributeError: 'Generator' Objekt hat kein Attribut 'Tooltips'. Ich habe mein Bokeh mit diesem Befehl aktualisiert: pip install --pre -i https://pypi.anaconda.org/bokeh/channel/dev/simple bokeh --extra-index-url https://pypi.python.org/ simple/ –

+1

Gleiches Problem wie Hamid auf 0.10 – dranxo

11

Wenn Sie mehrere Hover-Tools haben möchten, müssen Sie mehrere Hover-Tools an, die jeweils für einen anderen Renderer konfiguriert. Sie können sie auf diese Weise hinzufügen:

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))