2017-08-31 19 views
2

まず、素晴らしいサイト、素晴らしい人。あなたはすべて私の学習で多くの助けをしてくれました。ありがとう!Python Bokeh、ブラウザで動作しないコールバックの例

私はBokehとブラウザに問題があります。特に、Bokehで動作するJavascriptコールバックを取得しようとしています。

このサンプルコードは、https://bokeh.pydata.org/en/latest/docs/user_guide/interaction/callbacks.htmlからダウンロードしました。このウェブサイトには、ラスタツールの使用例が含まれています。

コードはWebサイト上では完全に機能しますが、コードをPythonにコピーして自分で実行すると、JSコールバックは機能しません。スチールの工具部分はうまく機能します。私はこれをIE、Chrome、Firefox、仕事用コンピュータ、家庭用コンピュータで実行しようとしました。

私は一般的にJavascriptではあまりよくありません。この問題についての洞察は非常に高く評価されます。

乾杯してありがとうございます。下記のウェブサイトから

コード:

from random import random 

from bokeh.layouts import row 
from bokeh.models import CustomJS, ColumnDataSource 
from bokeh.plotting import figure, output_file, show 

output_file("callback.html") 

x = [random() for x in range(500)] 
y = [random() for y in range(500)] 

s1 = ColumnDataSource(data=dict(x=x, y=y)) 
p1 = figure(plot_width=400, plot_height=400, tools="lasso_select", title="Select Here") 
p1.circle('x', 'y', source=s1, alpha=0.6) 

s2 = ColumnDataSource(data=dict(x=[], y=[])) 
p2 = figure(plot_width=400, plot_height=400, x_range=(0, 1), y_range=(0, 1), 
      tools="", title="Watch Here") 
p2.circle('x', 'y', source=s2, alpha=0.6) 

s1.callback = CustomJS(args=dict(s2=s2), code=""" 
     var inds = cb_obj.selected['1d'].indices; 
     var d1 = cb_obj.data; 
     var d2 = s2.data; 
     d2['x'] = [] 
     d2['y'] = [] 
     for (i = 0; i < inds.length; i++) { 
      d2['x'].push(d1['x'][inds[i]]) 
      d2['y'].push(d1['y'][inds[i]]) 
     } 
     s2.change.emit(); 
    """) 

layout = row(p1, p2) 

show(layout) 
+0

bokehバージョン0.12.6がインストールされていますか?私はあなたのコードをコピーし、それはGoogle Chromeで動作します。 – Anthonydouc

+0

こんにちは。私は仕事場にBokeh 0.12.4をインストールしました。オフィス版を更新するのは容易ではないので、家で試してみる。 Chromeの設定と関係があると思われます。ご指摘ありがとうございます。 – Kah

+0

私は0.12.4だと思います。change.emit()はソースデータの変更を登録する正しい構文ではありません。それはあなたがおそらく認識しているjavascriptが無効にされていない限り、私の推測だろう。 s2.change.emit()をs2.trigger( 'change')に置き換えて再試行してください(ただし、0.12.6ではこれを使用しないでください)。 – Anthonydouc

答えて

2

問題はバージョン0.12.4を使用している、ボケのバージョンの違いです。 bokehバージョン0.12.4では、カラムデータソースの変更を登録するには、構文を使用する必要があります。source.change('trigger').

最新のバージョンのドキュメント(参照元の例)は、バージョン0.12.6。 bokehバージョン0.12.6以降、これは償却され、構文はsource.change.emit()になりました。

関連する問題