具有数据源动态更新的 Bokeh 应用程序
Bokeh apps with dynamic updates of data sources
考虑 Bokeh 中的 sliders_app.py
示例。我希望能够定期更新情节。例如,假设我们想要每 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)
有没有办法在 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 服务器中的一个应用程序,您可以根据需要随时更新数据源模型,情节就会做出响应。
考虑 Bokeh 中的 sliders_app.py
示例。我希望能够定期更新情节。例如,假设我们想要每 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)
有没有办法在 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 服务器中的一个应用程序,您可以根据需要随时更新数据源模型,情节就会做出响应。