【问题标题】:Timeseries streaming in bokeh散景中的时间序列流
【发布时间】:2014-09-08 02:52:50
【问题描述】:

我想在散景中绘制实时时间序列。我只想在每次更新时绘制新数据点。我该怎么做?

散景网站上有一个动画情节的例子,但它每次都需要重新绘制整个画面。此外,我正在寻找一个简单的示例,我可以在其中逐点绘制时间序列的实时图。

【问题讨论】:

  • 你能描述一下你想要的不同吗?示例中的技术是更新数据源中的数据,然后绘图会自动更新。许多人已经使用示例中的技术来更新时间序列,我不太确定你想做什么不同的事情?如果要更新时间序列,可以将新点附加到数据的末尾。如果你想要一个固定的窗口,你也可以在必要时删除开始的点。如果你使用 numpy 数组,切片可能有助于使这更简单或更高效。
  • 另外,如果您询问对损坏区域和部分重绘的支持,目前不支持。更新数据总是会导致完全重新渲染。
  • 是的,我说的是像 matplotlib 的动画函数中的 blitz 选项这样的部分重绘
  • 你有多少分?你确定这是一个问题吗? Bokeh 在数以万计的点上表现出色,除此之外,您经常会遇到过度绘图问题,不得不求助于其他可视化技术。也就是说,增加对损坏区域的支持是合理的做法,但这不在我们的短期路线图中。

标签: python bokeh


【解决方案1】:

从 Bokeh 0.11.1 开始,Bokeh 服务器应用程序中的列数据源现在有了一个流接口。您可以在此处查看并轻松运行示例:

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

该示例显示了带有 MACD 指标(基于合成分时数据)的实时更新 OHLC 图表,该图表仅在每次更新时使用最新数据点更新图表。

基本上,使用流接口由两部分组成。首先创建一个与列数据源具有相同“形状”的新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 中的少量数据将被发送到情节,而不是全部。

【讨论】:

  • 运行示例并看到 OHLC 蜡烛在整个图表中流动。通常情况下,图表右端的最终 OHLC 烛台将随着新数据的到来而“发展”。在经过一个时间间隔时形成一个新的烛台;它的“O”值在创建时是固定的,“HLC”值会随着新数据的到来而改变。位于最右边的蜡烛需要随着传入的数据上下波动。用户应该能够使用交互式控件指定时间间隔。任何能够更新演示的人;让它有说服力和现实吗?
  • 我当然不是一个有经验的财务人员。我制作的演示是.stream 的简单独立演示,而不是真实世界的生产融资工具。如果有合适经验的人想要增强或改进演示,那肯定会受到欢迎(在某种程度上 --- 演示需要保持相对简单,才能有效地作为 特定主题的演示 i>) 顺便说一句,CDS 上的新 .patch 方法可能对“就地”更新最后一根蜡烛的部分有用。
  • 我的看法: 1) 让用户交互控制来指定烛台时间间隔。 2) 以指定的时间间隔将几百条柱形数据合成到数组中(使用日期时间;x 轴显示最近的日期和时间)。 3) 显示几百条。 4)生成合成的实时更新,连续操作和可视化图表上最新蜡烛的 HLC 值。 5) 在经过指定的时间间隔后,将另一根蜡烛添加到图表中。 6) 继续 7) 当用户改变间隔时再做一遍。问题是;如何在 Bokeh 中进行这项工作,什么时候调用?
  • 这对于公共邮件列表来说可能是一个更好的讨论。
猜你喜欢
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多