2015-09-18 5 views
6

Ich versuche, ein Diagramm zu erzeugen, die mehrere Zeilen hat, aber die Daten, die ich normalerweise in der langen Form wie diesen kommt:Python Bokeh: Farbe Set Linie basierend auf Spalte in columndatasource

x = [0.1, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0] 
y0 = [i**2 for i in x] 
y1 = [10**i for i in x] 
y2 = [10**(i**2) for i in x] 
df = pandas.DataFrame(data=[x,y0,y1,y2]).T 
df.columns = ['x','y0','y1','y2'] 

df2 = pd.concat([df.iloc[0:,1],df.iloc[0:,2],df.iloc[0:,3]], axis=0, keys = ['a','b','c']).reset_index() 
df2.columns = ['grp','x','y'] 

df2 

+----+-----+---+----------+ 
| | grp | x | y  | 
+----+-----+---+----------+ 
| 0 | a | 0 | 0.01  | 
| 1 | a | 1 | 0.25  | 
| 2 | a | 2 | 1.00  | 
| 3 | a | 3 | 2.25  | 
| 4 | a | 4 | 4.00  | 
| 5 | a | 5 | 6.25  | 
| 6 | a | 6 | 9.00  | 
| 7 | b | 0 | 1.26  | 
| 8 | b | 1 | 3.16  | 
| 9 | b | 2 | 10.00 | 
| 10 | b | 3 | 31.62 | 
| 11 | b | 4 | 100.00 | 
| 12 | b | 5 | 316.23 | 
| 13 | b | 6 | 1,000.00 | 
+----+-----+---+----------+ 

cd_df2 = ColumnDataSource(df2) 

, die an ist sagen wir, ich werde 'Gruppen' haben, wo x, y Paare für jede Gruppe über mehrere Zeilen hinweg aufgelistet werden.

Das folgende erzeugt alle 3 Zeilen, aber sie alle erscheinen als grau. Einstellen color = ‚grp‘ nicht spezifisch eine Farbe für jeden Wert in dem grp-Feld in der columndata Quelle

f = figure(tools="save",y_axis_type="log", y_range=[0.001, 10**11], 
     title="log axis example",x_axis_label='sections', y_axis_label= 
     'particles') 

f.line('x','y', line_color = 'grp', source = cd_df2) 

Wie kann ich dies in dem bokeh.plotting erreichen oder bokeh.models api (wollen hohe Niveau vermeiden Diagramme, um die Bibliothek besser zu verstehen)? Ich bin offen für andere Vorschläge, die es vermeiden, f.line() einmal für jede Zeile explizit aufzurufen und die Farbe individuell einzustellen (ich kann mehr als 10 Zeilen haben und das würde langweilig werden).

Antwort