[Python +散景]:如何制作针盘?

时间:2017-03-31 11:27:40

标签: python bokeh

我需要一个针盘,显示实时值。该值改变针角,而不是位置。

到目前为止,我所能做的只是使用 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

有什么想法吗?

1 个答案:

答案 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