2017-07-03 7 views
0

以下のbokehアプリケーションは、ボタンを押したときにランダムなデータセットを生成するためのものです。私はbokeh.clientスタイルを使用してアプリを提供しようとしています。同時視聴者の間で共有できるセッションが1つあります。curdoc()。add_root()は、bokehプロットのレンダリングを自動的に失敗させます。

私が行:curdoc().add_root(column(p,button))を含む場合、プロットはブラウザに表示されません。私はJSコンソールで幸せなメッセージを持つ空白のページを取得します。私がそれを削除すると、ボタンなしの静的プロットが得られます。誰も私のアプローチで間違っていることをここで説明できますか?

私は、アプリケーションが複数の異なるセッションを持つ他のサーバースタイルで動作すると付け加えるべきです。私はbokeh serve myapp.pyに電話をかけ、sessionオブジェクトを呼び出しません。

import numpy as np 
from bokeh.plotting import figure, curdoc 
from bokeh.layouts import column 
from bokeh.models import Button 
from bokeh.client import push_session, pull_session 

points = 100*np.random.rand(3,100) 
points_x = points[0].tolist() 
points_y = points[1].tolist() 
p = figure(x_range=(0,100), y_range=(0,100)) 

circle_p = p.circle(x = points_x, 
        y = points_y, 
        size = 20, 
        color = "navy", 
        alpha = 0.5) 

ds = circle_p.data_source 

#callback function to update circles 
def button_callback(): 
    new_data = dict() 
    new_points = 100*np.random.rand(3,100) 
    new_data['x'] = new_points[0].tolist() 
    new_data['y'] = new_points[1].tolist() 
    new_data['z'] = new_points[2].tolist() 
    ds.data = new_data 


#Add the button widget thingie to trigger the update 
button = Button(label="Update") 
button.on_click(button_callback) 

# Put the button and plot in a layout in document 
curdoc().add_root(column(p,button)) 

#create a session 
session = push_session(curdoc()) 
session.show(p) 
session.loop_until_closed() 

答えて

2

あなたは、ドキュメント全体だけでなく、プロットを表示したいので、あなただけの

session.show() 

ない

session.show(p) 

をしたいです。最初のバージョンはBokeh 0.12.6で動作します(後者も同様ですが、プロットは2回重複しています)。

+0

ええ、私は0.12.5 。説明ありがとう。 – MilesMcBain

関連する問題