While 循环中的实时绘图
当尝试实时显示来自视频源的数据时,用户经常会遇到以下困难:在 while 循环内更新绘图。一个典型的问题是绘图保持静态,直到循环完成。此问题源于用于显示动态数据的方法。
在提供的代码片段中:
while i < 1000: temp_y = np.random.random() x.append(i) y.append(temp_y) plt.scatter(i, temp_y) i += 1 plt.show()
循环附加数据点,绘制单个点,然后调用 plt.show ()。然而,plt.show() 会阻塞 GUI,并阻止其他代码运行,直到手动关闭窗口,从而导致更新延迟。
要实现实时绘图,需要使用 plt.pause() 。这是修订版:
import numpy as np import matplotlib.pyplot as plt plt.axis([0, 10, 0, 1]) for i in range(10): y = np.random.random() plt.scatter(i, y) plt.pause(0.05) plt.show()
关键的更改是在绘制每个点后添加 plt.pause(0.05)。 plt.pause() 既绘制更新的数据并运行 GUI 的事件循环。 0.05 参数指定 50 毫秒的延迟,让 GUI 有时间显示该点并处理用户交互(例如,关闭窗口)。
此修改后的代码应确保绘图实时平滑更新,允许用户动态可视化数据。
以上是如何在 Matplotlib 中的 While 循环内实现数据实时绘图?的详细内容。更多信息请关注PHP中文网其他相关文章!