2016-12-14 60 views
3

我使用散景通過將ColumnDataSource傳遞給figure.circle函數來創建散點圖。數據源有一列指定每個點的某些顏色,每行有十六進制代碼,因爲我想要使用的着色方案有些複雜。散景,如何更改使用CustomJS回調標誌符號顏色的列?

有沒有一種方法可以更改用於給小部件回調中的圓圈着色的列?我在想象一個下拉菜單,讓用戶可以爲點選擇各種着色方案。

回答

5

下面是一個使用models.Select插件和models.CustomJS的溶液的一個例子,選擇在定義的兩個着色方案的出ColumnDataSourceFigure.circle的:

import bokeh 
import bokeh.plotting 
p = bokeh.plotting.figure(x_range=(0,4), y_range=(0,4), plot_height=200) 
csource = bokeh.models.ColumnDataSource(data=dict(
     x=[1,2,3], 
     y=[1,2,1], 
     colors1=["#ff0000","#00ff00","#0000ff"], 
     colors2=["#ff00ff","#ffff00","#00ffff"])) 
cir = p.circle(x="x",y="y",fill_color="colors1",line_color="colors1", 
       size=20,source=csource) 
cb_cselect = bokeh.models.CustomJS(args=dict(cir=cir,csource=csource), code =""" 
    var selected_color = cb_obj.value; 
    cir.glyph.line_color.field = selected_color; 
    cir.glyph.fill_color.field = selected_color; 
    csource.trigger("change") 
""") 
color_select = bokeh.models.Select(title="Select colors", value="colors1", 
        options = ["colors1","colors2"], callback = cb_cselect) 
layout = bokeh.layouts.gridplot([[p],[color_select]]) 
bokeh.io.output_file("output.html") 
bokeh.io.show(layout) 

輸出類似於 enter image description here

+0

謝謝你帶舉例說明。我意識到我應該簡單地在顏色數據源中創建一個列,然後用回調將顏色加載到它中。 –

+0

任何機會,你也知道如何更改從JS回調顏色條? –

+0

我還沒有測試顏色條功能。以前的Bokeh版本沒有色條,所以我創建了一個作爲第二個陰謀,並添加了基於matplotlib映射的一些色條選擇:請參閱https://github.com/pmreyes2/bokeh_utils –