【问题标题】:Python plotting realtime dataPython绘制实时数据
【发布时间】:2019-10-20 17:16:53
【问题描述】:

我正在寻找一种从 python 绘制实时数据线图或散点图的方法。

在用科学计算进行算法实验时,我想通过这些图来监控长时间运行的循环。 IE。帮助我回答这个问题:每次迭代后我的结果是否仍在改进,或者我可以取消循环吗?

我正在寻找一种快速而肮脏的方法。我看到使用 Bokeh 和 Dash 可以对仪表板进行实时更新,但似乎需要大量样板代码才能获得更新图。

【问题讨论】:

  • 尝试制作笔记本并尝试Voila仪表板,应该很简单。您可以在主线程中制作情节并在单独的线程中更新它
  • @КристиянКацаров 谢谢。这使得仪表板我真的不需要。它似乎没有绘制我可以在算法运行时更新的图。可能我不明白如何正确使用它。
  • 有个问题,希望能帮到你github.com/voila-dashboards/voila/issues/431
  • 我也在做这样的实时仪表盘,如果你能分享你的后台更新机制就太好了!
  • @ImportanceOfBeingErnest 谢谢,这正是我想要的。如果你把它作为一个答案,我会接受它。

标签: python matplotlib plotly real-time bokeh


【解决方案1】:

这是 Bokeh v1.3.0 的简单“实时流媒体”示例。你可以用bokeh serve --show app.py运行它

app.py:

from bokeh.plotting import figure, curdoc
from datetime import datetime
import random

plot = figure(plot_width = 1200, x_axis_type = 'datetime', tools = 'pan,box_select,crosshair,reset,save,wheel_zoom')
line = plot.line(x = 'time', y = 'value', line_color = 'black', source = dict(time = [datetime.now()], value = [random.randint(5, 10)]))

def update(): 
    line.data_source.stream(dict(time = [datetime.now()], value = [random.randint(5, 10)]))

curdoc().add_root(plot)
curdoc().add_periodic_callback(update, 1000)

【讨论】:

  • 感谢这个独立的例子。对我来说,数据将在交互式 python 会话中的循环内更新。似乎链接到散景需要一些进程间通信,这似乎有点矫枉过正。尽管如此,我还是赞成提供一个完整的例子。
  • 如果这是在笔记本中,则有 push_notebook,否则您可以使用 AjaxDataSourceServerSentDataSource 将数据推送到独立 Bokeh 输出
  • 另见this example,其中添加了另一个线程来处理数据。并查看有关 Updating From Threads 的散景页面
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 2021-09-07
  • 2015-09-15
  • 2021-06-24
  • 1970-01-01
  • 2017-11-14
  • 2017-07-10
相关资源
最近更新 更多