【发布时间】:2020-09-27 21:04:18
【问题描述】:
我正在尝试从服务器回调中添加注释。回调应该“包裹”一个带有区域的点击点。
我的代码如下所示:
import numpy as np
from bokeh.models import BoxAnnotation
from bokeh.server.server import Server
from bokeh.plotting import figure
def _app(doc):
p = figure(tools=['tap'])
x = np.random.random(size=1000) - .5
x_cum = np.cumsum(x)
t = np.arange(len(x))
s = p.scatter(t, x_cum)
def handler(attr, old, new):
print('attr: {} old: {} new: {}'.format(attr, old, new))
new_layout = []
for t in new:
new_layout.append(BoxAnnotation(left=t - 5, right=t + 5, fill_color='green', fill_alpha=.3, level='underlay'))
p.center = new_layout
s.data_source.selected.on_change('indices', handler)
doc.add_root(p)
server = Server({'/': _app}, num_procs=1)
server.start()
if __name__ == '__main__':
server.io_loop.add_callback(server.show, "/")
server.io_loop.start()
我也尝试了p.add_layout 而不是设置p.center 但没有。我看到对于 Jupyter 笔记本来说,push_notebook() 函数可能在这里可以工作,所以对于服务器来说类似的东西可能会工作吗?
【问题讨论】: