【问题标题】:Streaming two line graphs using bokeh使用散景流式传输两个折线图
【发布时间】:2016-10-10 00:42:54
【问题描述】:

我想创建一个可视化,其中有两个线图,每个线图每秒更新一个新点。

我最近阅读了散景,发现它可以用于实时可视化数据流。但是,我还不知道如何在其中编码。

如果有人能告诉我如何使用散景完成这项任务,我将不胜感激。谢谢!

【问题讨论】:

    标签: python data-visualization bokeh


    【解决方案1】:

    对于bokeh-0.11.1

    基本上,您需要在散景服务器中运行您的 python 应用程序。然后任何人都可以连接到服务器并实时查看图表。

    首先,编写你的程序。例如使用此代码:

    # myplot.py
    from bokeh.plotting import figure, curdoc
    from bokeh.driving import linear
    import random
    
    p = figure(plot_width=400, plot_height=400)
    r1 = p.line([], [], color="firebrick", line_width=2)
    r2 = p.line([], [], color="navy", line_width=2)
    
    ds1 = r1.data_source
    ds2 = r2.data_source
    
    @linear()
    def update(step):
        ds1.data['x'].append(step)
        ds1.data['y'].append(random.randint(0,100))
        ds2.data['x'].append(step)
        ds2.data['y'].append(random.randint(0,100))  
        ds1.trigger('data', ds1.data, ds1.data)
        ds2.trigger('data', ds2.data, ds2.data)
    
    curdoc().add_root(p)
    
    # Add a periodic callback to be run every 500 milliseconds
    curdoc().add_periodic_callback(update, 500)
    

    然后使用您的程序从命令行运行服务器:

    C:\>bokeh serve --show myplot.py
    

    这将使用您的实时图表打开浏览器。

    有关所有详细信息,请参阅bokeh server documentation

    【讨论】:

    • 出于相当迟钝的技术原因,如果可以的话,通常首选“一次”更新整个.data 属性,即ds.data = new_data。此外,如果您这样做,则无需调用 trigger,Bokeh 服务器将自动获取对整个属性的更改。
    • 如何只显示最后的 X 点而不是压缩所有数据集?
    • .stream 接受一个rollover 参数,该参数表示在丢弃点之前要保持最大点数。
    • 有没有办法在这个例子中添加“窗口”?如果你运行这个,图表会越来越多地被数据堵塞,轴窗口不会自动调整。编辑:没关系,我在下面看到艾伦的回答扩展了这个例子。
    • trigger 在这里做什么?我找到了他们的源代码和文档的链接,但文档字符串是空白的:bokeh.pydata.org/en/latest/docs/reference/model.html
    【解决方案2】:

    您可以通过在绘图图形声明中添加以下内容来为图形添加滚动:

    p = figure(plot_width=400, plot_height=400)
    p.x_range.follow="end"
    p.x_range.follow_interval = 20
    p.x_range.range_padding=0
    

    其中 follow_interval = 开始滚动之前在图表上累积的点数。我相信您也可以在图表上设置可见范围。 仅供参考,我从散景 GitHub 页面上的 OHLC 示例中获得了滚动代码 在这里找到:https://github.com/bokeh/bokeh/tree/master/examples/app OHLC 是使用 bigreddot 提到的“...= new_data”技术的流式数据示例。

    【讨论】:

    • 对上述答案的补充。
    猜你喜欢
    • 2014-12-26
    • 2021-11-17
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多