2017-09-22 11 views
0

私はラジオボタン群を上にして散布図を作成しました。ウィジェットとプロットをリンクするにはどうしたらいいですか?私が達成したい成果は、以下のようなものです:Bokeh Pythonラジオボタンとのやりとり方法

「1」を選択 - 彼らのx値が2

に等しい場合にのみ、ドットを表示する - 彼らのx値が1

「2」を選択すると等しい場合にのみ、ドットを表示します

「3」を選択する - 自分のxの値はここ3

に等しい場合にのみ、ドットを表示し、これまでに私のコードです:

dataset = {'x':[0,1,2],'y':[0,1,2]} 

source2 = ColumnDataSource(data=dataset) 


p2 = figure(plot_width=600, plot_height=600, 
      x_range=(-0.1, 2.1), y_range=(-0.1,2.1)) 

p2.scatter('x', 'y', source=source2, 
      size=15, 
      alpha=0.8, 
      line_color=None) 

# option 
option = RadioButtonGroup(labels=["One", "Two", "Three"], active=0) 


show(column(option, p2)) 

答えて

2

これは、あなたが探しているものを行います。

from bokeh.io import show 
from bokeh.models import ColumnDataSource, 
from bokeh.plotting import figure 
from bokeh.models.widgets import RadioButtonGroup 
from bokeh.layouts import column, widgetbox 
from bokeh.models.callbacks import CustomJS 

dataset = {'x':[0,1,2],'y':[0,1,2],'x_filter':[0,1,2]} 

source = ColumnDataSource(data=dataset) 
p = figure(plot_width=600, plot_height=600, 
      x_range=(-0.1, 2.1), y_range=(-0.1,2.1)) 
p.scatter('x', 'y', source=source, 
      size=15, alpha=0.8, line_color=None) 

# add callback to control 
callback = CustomJS(args=dict(p=p, source=source), code=""" 

      var radio_value = cb_obj.active; 
      var data = source.data;    
      x = data['x'] 
      x_filter = data['x_filter'] 
      y = data['y'] 

      for (i = 0; i < x.length; i++) { 
       if(x_filter[i] == radio_value) { 
        x[i] = x_filter[i]; 
       } else { 
        x[i] = undefined; 
       } 
      } 
     source.change.emit(); 
     """) 

# option 
option = RadioButtonGroup(labels=["One", "Two", "Three"], 
          active=0, callback=callback) 
show(column(widgetbox(option),p)) 

興味深いコードはJavaScriptです。基本的には、ポイントのx座標がRadioButtonの選択と等しいかどうかをチェックします。そうでない場合、ポイントは欠落に設定されます。これにより、プロット内の点が消えます。新しい列x_filterがデータに追加されます。これは、ラジオの選択肢を元のxと比較するために使用されます。実際のxがプロットに使用されます。

+0

ありがとうございました。このコードは部分的に機能しました。ラジオボタンをクリックすると、グラフが更新されません。私はグラフをドラッグしなければならないし、ドットが正しく表示されます。理由を知っていますか?おかげで – AmadeusNing

+0

どのbokehバージョンを使用していますか?私は0.12.6でテストしました。それは少なくともそれより新しい何かで動作するはずです。どのブラウザを使用していますか?別のものを試してみるべきです。 – mc51

+0

ありがとうmc51!私はBokehを0.12.7に更新し、問題は解決しました。再度、感謝します – AmadeusNing

関連する問題