以下の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()
ええ、私は0.12.5 。説明ありがとう。 – MilesMcBain