Ame*_*ina 2 python python-3.x bokeh
考虑一下sliders_app.pyBokeh中的例子.我希望能够定期更新绘图.例如,假设我们想要每10秒对绘图进行一次时移.我如何在应用程序的上下文中执行此操作?
为了说明目标,我想在应用程序中添加以下非常简单的逻辑,只需循环移动X和Y.
请注意,没有简单的方法将此循环插入原始循环sliders_app.py(它会去哪里?).
while True:
N = 200
# Get the current slider values
a = self.amplitude.value
b = self.offset.value
w = self.phase.value
k = self.freq.value
# Circularly time-shift X and Y
x = self.source.data["x"]
x = np.roll(x,1)
y = a*np.sin(k*x + w) + b
# Update the data container for the plot
self.source.data = dict(x=x, y=y)
# Sleep until the next update
time.sleep(0.1)
Run Code Online (Sandbox Code Playgroud)
在Bokeh有什么办法吗?Bokeh是否可能有任何计时器小部件可以连接计时器回调以更新数据源?
如果没有,是否有计划在未来一段时间内使用此功能?
它看起来像spectrogram.py使用线程来处理这种类型的更新.对于任何有兴趣的人来说,这可能是解决它的方法.
有几个选择.这AjaxDataSource可以导致客户端定期直接从REST端点提取.这是一个显示其用途的示例:
https://github.com/bokeh/bokeh/blob/master/examples/plotting/file/ajax_source_realtime.py
请注意,谱图可能很快就会被重写以使用它,并减少手工编写的JS数量.(谱图相当复杂,有一些自定义JS,我们总是试图随着时间的推移减少这个数量)
还值得一提的是,频谱图中的线程与服务器方面有关,它与Bokeh本身没有任何关系,或者与Bokeh的更新有关.
如果您在Bokeh服务器中运行应用程序,您可以随时更新数据源模型,并且情节会响应.