2015-09-18 17 views
6

Tôi đang cố gắng để tạo ra một biểu đồ có nhiều dòng, nhưng dữ liệu tôi sử dụng thường đi kèm trong dạng dài như thế này:Python Bokeh: Set màu dòng dựa trên cột trong 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) 

Đó là để nói rằng, tôi sẽ có 'nhóm' trong đó các cặp x, y cho mỗi nhóm được liệt kê trên nhiều hàng.

Sau đây tạo tất cả 3 dòng, nhưng tất cả đều hiển thị dưới dạng màu xám. Thiết color = 'grp' không cụ thể một màu cho mỗi giá trị trong lĩnh vực grp trong nguồn 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) 

Làm thế nào tôi có thể đạt được điều này trong bokeh.plotting hoặc bokeh.models api (muốn tránh mức cao biểu đồ để hiểu rõ hơn về thư viện)? Tôi đang mở cho các đề xuất khác mà tránh rõ ràng gọi f.line() một lần cho mỗi dòng và cá nhân thiết lập màu sắc (tôi có thể có 10 + dòng và điều này sẽ nhận được tẻ nhạt).

Trả lời

Các vấn đề liên quan