While 循环中的实时绘图:故障排除指南
尝试创建实时绘图时,必须了解原因在 while 循环期间,绘图更新可能不会按预期发生。在此特定实例中,使用 matplotlib 实现实时绘图以可视化从 OpenCV 中的相机检索的数据时出现问题。
为了隔离该问题,提供了一个简化的示例代码:
fig = plt.figure() plt.axis([0, 1000, 0, 1]) i = 0 x = list() y = list() while i < 1000: temp_y = np.random.random() x.append(i) y.append(temp_y) plt.scatter(i, temp_y) i += 1 plt.show()
期望看到单独绘制的 1000 个点,令人惊讶的是,代码只显示第一个点,然后等待循环完成,然后再填充图表的其余部分。出现这种情况是因为 matplotlib 的默认行为是等到程序结束时绘制整个图形。
要克服此限制并实现实时绘图,应将代码片段修改如下:
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)。此函数将程序的执行暂停 0.05 秒,允许绘制数据点并运行 GUI 的事件循环(使鼠标交互成为可能)。
通过此修改,绘图将在实时显示添加到数据集中的每个点。
以上是为什么我的 Matplotlib 实时绘图不在 While 循环内更新?的详细内容。更多信息请关注PHP中文网其他相关文章!