sto cercando di produrre un grafico che dispone di più linee, ma i dati che uso di solito si presenta in forma estesa in questo modo:Python Bokeh: Imposta il colore della linea sulla base di colonna 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)
Vale a Diciamo, avrò "gruppi" dove x, y coppie per ogni gruppo sono elencate su più righe.
Quanto segue produce tutte e 3 le linee, ma tutte appaiono in grigio. Impostazione color = 'GRP' non specifica un colore per ogni valore nel campo grp nella fonte 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)
Come avrei potuto realizzare questo nel bokeh.plotting o bokeh.models api (voglio evitare di alto livello grafici per capire meglio la biblioteca)? Sono aperto ad altri suggerimenti che evitano esplicitamente di chiamare f.line() una volta per ogni riga e di impostare individualmente il colore (potrei avere 10+ linee e questo sarebbe noioso).