Python 具有数据源动态更新的Bokeh应用程序

Python 具有数据源动态更新的Bokeh应用程序,python,python-3.x,bokeh,Python,Python 3.x,Bokeh,以博克为例。我想有能力定期更新绘图。例如,假设我们希望每10秒对绘图进行时间偏移。如何在应用程序的上下文中执行此操作 为了说明这个目标,我想在应用程序中添加以下非常简单的逻辑,它可以简单地循环移动X和Y 请注意,没有简单的方法将此循环插入原始的滑块\u app.py(它会去哪里?) 在博克有没有办法做到这一点?Bokeh是否有任何可以连接计时器回调以更新数据源的计时器小部件 如果没有,是否有计划在将来的某个时候合并此功能 更新 它似乎使用线程来处理这种类型的更新。对任何感兴趣的人来说,这可能是成

以博克为例。我想有能力定期更新绘图。例如,假设我们希望每10秒对绘图进行时间偏移。如何在应用程序的上下文中执行此操作

为了说明这个目标,我想在应用程序中添加以下非常简单的逻辑,它可以简单地循环移动X和Y

请注意,没有简单的方法将此循环插入原始的
滑块\u app.py
(它会去哪里?)

在博克有没有办法做到这一点?Bokeh是否有任何可以连接计时器回调以更新数据源的计时器小部件

如果没有,是否有计划在将来的某个时候合并此功能

更新
它似乎使用线程来处理这种类型的更新。对任何感兴趣的人来说,这可能是成功的方法。

有几个选择。
AjaxDataSource
可以使客户端定期直接从REST端点提取数据。下面是一个示例,展示了它的用途:

请注意,频谱图可能会很快被重写以使用此功能,并减少手动编写的JS量。(光谱图相当复杂,有一些自定义的JS,我们总是试图随着时间的推移减少该数量)

另外值得一提的是,spectrogram中的线程与服务器端的事情有关,它实际上与Bokeh本身无关,也与获取Bokeh的更新无关


如果您正在Bokeh服务器上运行应用程序,您可以随意更新数据源模型,绘图将做出响应

谢谢你,布莱恩。假设数据存在于数据库中(例如PostgresSQL),我们需要每隔10秒自动查询一次。我想我可以使用不同的数据源来实现这一点(这里可能有帮助吗?)是否有任何示例,即使是非常小的和实验性的(!)来说明如何定期将数据库中的数据拉入应用程序?还有,当你说有几个选项时。除了AjaxDataSource,还有其他的吗?也许极度简化这个问题会有所帮助,就像在OP中一样。一个非常简单的数据源,每10秒循环移动X和Y数组。这有可能吗?如果有人给我提供足够的指针,我很乐意帮助解决这个问题。BlazeDataSource有可能有用。但举个例子,我在上面链接的那个就是我要告诉你的。该示例按程序生成数据,但可以修改为查询数据库。链接已失效,但仍可以在处找到文件,尽管此答案可能已过时。不确定。
  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)