我需要一个针盘,显示实时值。该值改变针角,而不是位置。
到目前为止,我所能做的只是使用 ray()或 annular_wedge()字形,但此解决方案存在许多问题:以前的行不是删除,经过几次更新后冻结,文物。完全无法使用。
这是我目前正在处理的精简代码。
from bokeh.driving import linear
from bokeh.plotting import figure, curdoc
import random
p = figure(plot_width=400, plot_height=400,
x_range=[0, 2], y_range=[0, 2],
x_axis_type=None, y_axis_type=None)
@linear()
def update(step):
ref_angle = random.random() * 2 * 3.14
p.ray(x=[1], y=[1], length=0.5, angle=ref_angle, color="red", line_width=2)
curdoc().add_root(p)
curdoc().add_periodic_callback(update, 1000)
如您所见,我需要旋转光线更新 ref_angle 。
有什么想法吗?
答案 0 :(得分:2)
您可以创建包含ref_angle数据的ColumnDataSource
对象,然后更新该数据,而不是在每次更新时绘制新的光线。
如果您已经运行了一个散景服务器(在另一个终端运行bokeh serve
中),则以下代码应该可以正常工作。
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure, curdoc
from bokeh.client import push_session
import random
p = figure(plot_width=400, plot_height=400,
x_range=[0, 2], y_range=[0, 2],
x_axis_type=None, y_axis_type=None)
source = ColumnDataSource(dict(ref_angle=[0]))
p.ray(x=1, y=1, length=0.5, angle='ref_angle', color="red",
line_width=2, source=source)
# open a session to keep our local document in sync with server
session = push_session(curdoc())
def update():
source.data.update(ref_angle=[random.random() * 2 * 3.14])
curdoc().add_periodic_callback(update, 1000)
session.show(p) # open the document in a browser
session.loop_until_closed() # run forever