2017-12-18 24 views
0

私はBokehとPython 2.7を使用しています。選択ボークからデータソースを変更する方法

私は、Select Boxに基づいてプロットを変更するためにデータソースを更新しようとしています。 しかし、私はプロットを更新することができません。 私は何が間違っていますか?それとも良い方法がありますか?

コード:

from bokeh.models import ColumnDataSource 
from bokeh.plotting import figure, output_file, show, output_notebook 
from bokeh.models.widgets import Select 
from bokeh.io import curdoc 
from bokeh.layouts import column, row 
from bokeh.io import output_file, show 
from bokeh import models 
import pandas as pd 

d1 = dict(x= [10,4,6,4], y = [6,2,8,10]) 

d2 = dict(x= [23,12,50,30], y = [5,10,23,18,12]) 

source = ColumnDataSource(data=d1) 

p = figure() 

select = Select(title="Select d", options=['d1', 'd2']) 

def update_plot(attrname, old, new): 
    if new == 'd1': 
     newSource = d1 

    if new == 'd2': 
     newSource = d2 


    source.data = newSource 

p.line(x='x', y='y',source = source) 

select.on_change('value', update_plot) 
layout = column(row(select, width=400), p) 
curdoc().add_root(layout) 
show(layout) 
+0

あなたは 'update_plot'がトリガーされているのでしょうか? on_changeなしで 'update_plot'を直接呼び出そうとしましたか? – hansaplast

+0

update_plotがトリガされているかどうかを確認するにはどうすればよいですか? 必要な 'on_change'関数のbokehドキュメントを読みました –

+0

'update_plot'内に' print( 'hello') 'ステートメントを追加できますか? – hansaplast

答えて

1

あなたはこのように、ボケサーバとボケを開始する必要があります。

bokeh serve myscript.py 

そしてブラウザでlocalhost:5006を開きます。

サーバーなしでbokehを起動すると、静的なhtmlファイルが作成されます。ページを機能として呼び出すことはできません(そのため、printは表示されません)。初期ロード後のPythonコード。 the docsから:

ボケのアーキテクチャは、ハイレベル「モデル・オブジェクト」(プロットのようなものを表す、範囲、軸、グリフなど)Pythonで作成され、その後、JSON形式に変換されるようなものですこれはクライアントライブラリBokehJSによって消費されます。 [...]しかし、モデルオブジェクトをPythonとブラウザで同期させておくことができれば、ブラウザで生成されたUIやツールイベントに計算やPythonのフルパワーを使用したクエリ

+1

Addtionally(ちょうどFYI) 'show'はBokehのアプリケーションの中ではusefuではなく、無視されます(しかし' --show'を 'bokeh serve'に渡して自動的にブラウザを開きます)。 – bigreddot

関連する問題