2015-03-22 17 views
8

Alles, was ich tun möchte, ist ein Tortendiagramm erstellen. Die Bokeh-Dokumentation umfasst eine Reihe ausgefeilter Diagramme, einschließlich eines Donut-Diagramms, aber es scheint kein Kreisdiagramm zu enthalten.Wie erstelle ich ein Kreisdiagramm mit Bokeh?

Gibt es ein Beispiel dafür?

Letztendlich muss das Diagramm in eine Webseite eingebettet werden, also muss ich die HTML-Einbettungsfunktionen von Bokeh nutzen.

Antwort

7

Ein Beispiel für Bokeh 0.8.1 mit der bokeh.plotting Schnittstelle:

from bokeh.plotting import * 
from numpy import pi 

# define starts/ends for wedges from percentages of a circle 
percents = [0, 0.3, 0.4, 0.6, 0.9, 1] 
starts = [p*2*pi for p in percents[:-1]] 
ends = [p*2*pi for p in percents[1:]] 

# a color for each pie piece 
colors = ["red", "green", "blue", "orange", "yellow"] 

p = figure(x_range=(-1,1), y_range=(-1,1)) 

p.wedge(x=0, y=0, radius=1, start_angle=starts, end_angle=ends, color=colors) 

# display/save everythin 
output_file("pie.html") 
show(p) 

Bokeh> 0.9 korrekt den Begrenzungsbereich aller Glyphen wird berechnet, nicht nur „punktuellen“ Marker Glyphen und Einstellung ausdrücklich die Bereiche wie Dies wird nicht benötigt.

Sie die Ausgabe sehen können (Code geändert im IPython Notebook mit output_notebook anzuzeigen) hier:

enter image description here

+1

Groß. Und ich kann sie so beschriften, wie ich andere Glyphen beschreibe, oder? –

+2

Es gibt mehrere Möglichkeiten zum Beschriften. Sie können eine Legende hinzufügen (https://github.com/bokeh/bokeh/blob/master/examples/plotting/file/legend.py) oder Sie können die Methode 'text' im Diagramm verwenden, um selbst Textbeschriftungen hinzuzufügen. Der einfachste Weg, die Achsenbeschriftungen zu setzen, besteht darin, z. B. "x_axis_label" an den Aufruf von "figure" – bigreddot

+0

zu übergeben. Für diejenigen wie mich, die an Pandas saugen. So erhalten Sie die 'Prozente' aus einer Datenreihe:' Prozent = [0] + Liste (ds.cumsum()/ds.sum()) Prozent = [0] + Liste (ds.cumsum()/ds.sum()) '. Ich weiß nicht, ob es einen einfacheren Weg gibt, aber ich habe Legenden wie diese hinzugefügt: 'p = figure()' gefolgt von 'für Start, Ende, Legende, Farbe in zip (Anfang, Ende, Liste (ds.index), Farben) 'und dann' p.wedge (Farbe = Farbe, Legende = Legende, ...) 'wie oben. Und schließlich wird hier erklärt, wie man die Legende neben das Tortendiagramm stellt (leider kleiner): http://stackoverflow.com/questions/26254619 –

10

Ein Donut Diagramm wird ein einfaches Tortendiagramm zurückkehren, wenn Sie eine Pandas Serie eher als ein Datenrahmen. Und es wird auch Etiketten anzeigen!

from bokeh.charts import Donut, show 
import pandas as pd 
data = pd.Series([0.15,0.4,0.7,1.0], index = list('abcd')) 
pie_chart = Donut(data) 
show(pie_chart) 

Donut Chart

+0

Dies ist definitiv eine einfachere Lösung, aber ich würde die Antwort immer noch empfehlen @bigreddot, weil die Verwendung von Keilen die Erstellung von Labels ermöglicht. Sehen Sie sich dieses GitHub-Problem an: https://github.com/bokeh/bokeh/issues/3843 –

+0

In der Bokeh-Version 0.12.10 löst dies den Fehler aus: 'ModuleNotFoundError: Kein Modul namens 'bokeh.charts'' – arun

+0

in Bokeh 0.12.10 bokeh.charts wurden aus dem Bokeh-Core migriert. Es wird jetzt von http://holoviews.org/ unterstützt –

0

Nicht zuletzt aufgrund der oben für mich auch zu helfen. Ich möchte hinzufügen, wie eine Legende zu Ihrem Tortendiagramm hinzugefügt wird, da ich Probleme damit hatte. Unten ist nur ein Ausschnitt. Mein Kreisdiagramm hatte nur 2 Abschnitte. So machte ich gerade eine Kreisdiagrammabbildung und nannte Keil zweimal darauf:

import numpy as np 
percentAchieved = .6 
pieFigure = figure(x_range=(-1, 1), y_range=(-1, 1)) 
starts = [np.pi/2, np.pi * 2 * percentAchieved + np.pi/2] 
ends = [np.pi/2+ np.pi * 2 * percentAchieved, np.pi/2 + 2*np.pi] 
pieColors = ['blue', 'red'] 
#therefore, this first wedge will add a legend entry for the first color 'blue' and label it 'hello' 
pieFigure.wedge(x=0, y=0, radius=.7, start_angle=starts, end_angle=ends, color=pieColors, legend="hello") 
#this will add a legend entry for the 'red' color and label it 'bye'. Made radius zero to not make 
#another piechart overlapping the original one 
pieFigure.wedge(x=0, y=0, radius=0, start_angle=starts, end_angle=ends, color=pieColors[1], legend="bye")