2015-09-18 6 views
6

Próbuję produkują wykres, który ma wiele wierszy, ale dane używam zwykle przychodzi w długiej formie jak ta:Python Bokeh: Ustaw kolor linii oparte na kolumnie w 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) 

To jest powiedz, będę miał "grupy", gdzie x, y pary dla każdej grupy są wymienione w wielu wierszach.

Poniżej przedstawiono wszystkie 3 wiersze, ale wszystkie są wyświetlane jako szare. Ustawianie koloru = „grp” nie specyficzny kolor dla każdej wartości w dziedzinie GRP w źródle columndata

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) 

Jak mogę to osiągnąć w bokeh.plotting lub bokeh.models API (chcemy uniknąć wysokiego poziomu wykresy, aby lepiej zrozumieć bibliotekę)? Jestem otwarty na inne sugestie, które unikają jawnego wywoływania f.line() raz dla każdej linii i pojedynczo ustawiają kolor (mogę mieć ponad 10 wierszy, co stałoby się żmudne).

Odpowiedz