Bokeh中的时间序列流处理

18 投票
1 回答
15486 浏览
提问于 2025-04-18 13:40

我想在bokeh中绘制一个实时的时间序列图。我只想在每次更新时绘制新的数据点。该怎么做呢?

bokeh网站上有一个关于动画图的例子,但每次更新时都需要重新绘制整个图。还有,我希望能找到一个简单的例子,能够逐点绘制实时的时间序列图。

1 个回答

15

从 Bokeh 的版本 0.11.1 开始,Bokeh 服务器应用程序中有了一个流式接口,可以用来处理列数据源。你可以在这里看到一个简单的例子并轻松运行:

https://github.com/bokeh/bokeh/tree/master/examples/app/ohlc

这个例子展示了一个实时更新的 OHLC 图表,并且带有 MACD 指标(基于合成的逐笔数据),每次更新时只会用最新的数据点来更新图表。

简单来说,使用这个流式接口分为两个部分。首先,你需要创建一个新的 dict,它的“形状”要和你的列数据源一样:

new_data = dict(
    time=[t],
    open=[open],
    high=[high],
    low=[low],
    close=[close],
    average=[average],
    color=[color],
)

然后把这个字典传递给 .stream 方法,可以选择性地加一个 rollover 参数,这个参数用来指定浏览器中要保留多大的数据缓冲区(早期的数据会开始被丢弃):

source.stream(new_data, 300)

这样的话,只有 new_data 中的小部分数据会被发送到图表,而不是所有的数据。

撰写回答