Python-在matplotlib中动态更新图
我正在用Python开发一个应用程序,该应用程序从串行端口收集数据并针对到达时间绘制收集的数据图。数据的到达时间不确定。我希望在收到数据时更新绘图。我搜索了如何执行此操作,发现了两种方法:
- 清除绘图,然后重新绘制所有点的绘图。
- 通过在特定间隔后对其进行更改来对图进行动画处理。
我不喜欢第一个程序,因为该程序会运行很长时间(例如一天),并且会收集数据,因此重新绘制绘图会非常缓慢。第二种方法也不可取,因为数据的到达时间不确定,我只想在接收到数据时更新绘图。
是否有一种方法可以仅在收到数据时通过添加更多点来更新图?
回答:
matplotlib
中有多种动画数据的方式,具体取决于你使用的版本。你看过matplotlib
食谱示例吗?另外,请在matplotlib
文档中查看更现代的动画示例。最后,动画API定义了一个函数FuncAnimation,该函数可以对一个函数进行实时动画处理。该功能可能只是你用来获取数据的功能。
每种方法基本上都设置了data
要绘制的对象的属性,因此不需要清除屏幕或图形。data可
以简单地扩展该属性,因此你可以保留先前的点,而只需继续添加到线(或图像或所绘制的任何东西)中。
假设你说数据到达时间不确定,那么最好的选择就是执行以下操作:
import matplotlib.pyplot as pltimport 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
。
以上是 Python-在matplotlib中动态更新图 的全部内容, 来源链接: utcz.com/qa/433860.html