curdoc()。add_root()导致散景图渲染无声地失败

时间:2017-07-03 06:23:42

标签: python bokeh

下面的散景应用程序用于在按下按钮时生成随机数据集。我正在尝试使用bokeh.client样式投放应用,其中有一个会话可以在同时观看者之间共享。

如果我包含该行: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()

1 个答案:

答案 0 :(得分:2)

你只想要

session.show()

不是

session.show(p)

因为您想要显示整个文档,而不仅仅是图表。第一个版本适用于我的Bokeh 0.12.6(后者也有一些作品,但情节重复了两次。我猜您使用的旧版本也有一些布局错误)