2016-12-14 2 views
3

私はColumnDataSourcefigure.circle関数に渡して散布図を作成するためにBokehを使用しています。データソースには、各行の16進コードを使用して、各点の特定の色を指定する列があります。使用する色付け体系は​​多少複雑です。Bokeh、CustomJSコールバックでグリフカラーに使用される列を変更するにはどうすればよいですか?

ウィジェットのコールバックでサークルの色を変更する方法はありますか?私はドロップダウンメニューを想像しているので、ユーザーはポイントのためのさまざまな色付けスキームを選択できます。ここで

答えて

5

Figure.circleColumnDataSourceで定義された2つの着色スキームのうち選択しmodels.Selectウィジェットとmodels.CustomJSを使用してソリューションの例です:

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にはカラーバーがなかったので、2番目のプロットとして作成し、matplotlibマップに基づいていくつかのカラーバー選択を追加しました:https://github.com/pmreyes2/bokeh_utilsを参照してください。 –

関連する問題