一尘不染

Python-在matplotlib中动态更新图

python

我正在用Python开发一个应用程序,该应用程序从串行端口收集数据并针对到达时间绘制收集的数据图。数据的到达时间不确定。我希望在收到数据时更新绘图。我搜索了如何执行此操作,发现了两种方法:

  1. 清除绘图,然后重新绘制所有点的绘图。
  2. 通过在特定间隔后对其进行更改来对图进行动画处理。

我不喜欢第一个程序,因为该程序会运行很长时间(例如一天),并且会收集数据,因此重新绘制绘图会非常缓慢。第二种方法也不可取,因为数据的到达时间不确定,我只想在接收到数据时更新绘图。

是否有一种方法可以仅在收到数据时通过添加更多点来更新图?


阅读 1247

收藏
2020-02-16

共1个答案

一尘不染

matplotlib中有多种动画数据的方式,具体取决于你使用的版本。你看过matplotlib食谱示例吗?另外,请在matplotlib文档中查看更现代的动画示例。最后,动画API定义了一个函数FuncAnimation,该函数可以对一个函数进行实时动画处理。该功能可能只是你用来获取数据的功能。

每种方法基本上都设置了data要绘制的对象的属性,因此不需要清除屏幕或图形。data可以简单地扩展该属性,因此你可以保留先前的点,而只需继续添加到线(或图像或所绘制的任何东西)中。

假设你说数据到达时间不确定,那么最好的选择就是执行以下操作:

import matplotlib.pyplot as plt
import numpy

hl, = plt.plot([], [])

def update_line(hl, new_data):
    hl.set_xdata(numpy.append(hl.get_xdata(), new_data))
    hl.set_ydata(numpy.append(hl.get_ydata(), new_data))
    plt.draw()

然后,当你从串行端口接收数据时,只需调用update_line

2020-02-16