Python-在matplotlib中动态更新图

发布于 2021-02-02 23:18:10

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

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

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

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

关注者
0
被浏览
141
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看