2017-12-01 8 views
1

Bokeh Ich habe folgende auf der Grundlage ihrer docs:Beschriftungen hinzufügen Punkte

album_names = ['Ctrl', 'Ctrl', 'Z', 'Ctrl', 'Ctrl', 'Z', 'Ctrl', 'Ctrl', 'Ctrl', 'Ctrl', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Ctrl', 'Ctrl', 'Ctrl', 'Ctrl', 'Ctrl', 'Ctrl', 'Z'] 
valence = [0.37, 0.598, 0.481, 0.166, 0.413, 0.0798, 0.549, 0.332, 0.348, 0.335, 0.355, 0.22, 0.433, 0.158, 0.357, 0.134, 0.367, 0.237, 0.248, 0.239, 0.535, 0.432, 0.505, 0.142] 
energy = [0.579, 0.686, 0.551, 0.367, 0.61, 0.475, 0.488, 0.525, 0.534, 0.517, 0.56, 0.342, 0.688, 0.505, 0.551, 0.63, 0.71, 0.453, 0.518, 0.708, 0.463, 0.684, 0.296, 0.576]` 

df = pd.DataFrame([album_names, energy, valence]).T 
df.columns = ['album_name', 'energy', 'valence'] 

ich ein Streudiagramm mit Bokeh mit Wertigkeit auf der x-Achse, Energie auf der y-Achse machen will. Wenn Sie den Mauszeiger über jeden Punkt bewegen, soll er auch den Wert für album_name angeben. Und die Farbe des Punktes basiert album_name.

Ich habe versucht, die folgenden:

from bokeh.models import ColumnDataSource, Range1d, LabelSet, Label 
from bokeh.io import output_notebook, show 
from bokeh.plotting import figure 
from bokeh.palettes import brewer 

source = ColumnDataSource(data=dict(valence=valence, 
            energy=energy, 
            names=album_names)) 

p = figure() 
p.scatter(x='valence', y='energy', size=8, source=source) 
labels = LabelSet(x='valence', y='energy', text='names', 
        level='glyph', x_offset=5, y_offset=5, 
        source=source, render_mode='canvas') 

p.add_layout(labels) 
show(p) 

Aber das zeigt nicht den Namen des Albums, wie Sie über den Punkt schweben. Es behebt den Albumnamen neben dem Punkt. Jede Hilfe in den ALBUM_NAME immer nur um zu zeigen, wenn sie über den Punkt schweben und das Ändern der Farbe basierend auf dem Wert von ALBUM_NAME würde stark

Hinweis verstanden werden: es wäre ähnlich wie unter enter image description here

+0

Vielen Dank für die Bearbeitung gezeigt, @ user4261201. Hatte keine Ahnung, wie man den Code richtig formatiert. – iwtbid

Antwort

3

prüfen dies es den Trick:

from bokeh.plotting import figure, ColumnDataSource, output_notebook, show 
from bokeh.models import HoverTool, WheelZoomTool, PanTool, BoxZoomTool, ResetTool, TapTool, SaveTool 
from bokeh.palettes import brewer 

output_notebook() 

#preprocessing the data with column album_name 
category = 'album_name' 

category_items = df[category].unique() 
#selecting the colors for each unique category in album_name 
palette = brewer['Set2'][len(category_items) + 1] 
#mapping each category with a color of Set2 
colormap = dict(zip(category_items, palette)) 
#making a color column based on album_name 
df['color'] = df[category].map(colormap) 

title = "Album_names" 
#feeding data into ColumnDataSource 
source = ColumnDataSource(df) 
#Editing the hover that need to displayed while hovering 
hover = HoverTool(tooltips=[('Album_name', '@album_name')]) 
#tools that are need to explote data 
tools = [hover, WheelZoomTool(), PanTool(), BoxZoomTool(), ResetTool(), SaveTool()] 

#finally making figure with scatter plot 
p = figure(tools=tools,title=title,plot_width=700,plot_height=400,toolbar_location='right',toolbar_sticky=False,) 
p.scatter(x='valence',y='energy',source=source,size=10,color='color',legend=category) 

#displaying the graph 
show(p) 

Der Ausgang wird angezeigt, wie für ALBUM_NAME Ctrl Ctrl Der Ausgang angezeigt werden wird, wie für ALBUM_NAME Z Z

+0

Sieht gut aus! Ich nehme an, dass 'brewer ['Set2'] [len (category_items) + 1]' weil brewer ['Set2'] mindestens drei Optionen hat? – iwtbid

+0

@iwtbid Wählen Sie die Farben aus, die im Diagramm angezeigt werden sollen. Wenn es dazu beigetragen hat, die Lösung zu akzeptieren/zu verbessern. Vielen Dank. –

2

Versuchen Sie folgendes:

Alle Tooltips werden durch die HoverTool angezeigt, also müssen Sie es hinzufügen und konfigurieren, um anzuzeigen, was Sie wollen. Weitere Informationen finden Sie in seiner documentation.

+0

Wenn Sie dieses Dokumentationsbeispiel direkt verwenden, erhalten Sie nicht die verschiedenen Farben für 'album_names'. Überprüfen Sie meine Lösung, die andere Farbe gibt. @Eugene –

+0

Ja, der Titel der Frage enthält keine Färbung der Punkte, also habe ich es übersehen. –

Verwandte Themen