python - 如何使用 matplotlib 在 while 循环中实时绘图?

我正在尝试使用 OpenCV 实时绘制来自相机的一些数据。但是,实时绘图(使用 matplotlib)似乎不起作用。

我已将问题分离到这个简单的示例中:

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 个点。实际发生的情况是窗口弹出并显示第一个点(可以),然后等待循环完成,然后再填充图表的其余部分。

任何想法为什么我没有看到一次填充一个点?

最佳答案

这是相关代码的工作版本(至少需要 2011-11-14 版本的 Matplotlib 1.1.0):

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) 的调用,它既绘制新数据又运行 GUI 的事件循环(允许鼠标交互)。

https://stackoverflow.com/questions/11874767/

相关文章:

python - 在多个模块中使用日志记录

python - 转义正则表达式字符串

list - 连接两个列表 - '+=' 和 extend() 之间的区别

linux - Linux 中是否有任何标准的退出状态代码?

python - cron 和 virtualenv

linux - 如何在不输入 'screen' 的情况下退出 'exit' ?

python - 什么时候 "i += x"与 Python 中的 "i = i + x"不同?

windows - Windows 和 Linux 目录名称中禁止使用哪些字符?

linux - 在每行的开头添加前缀字符串

linux - 如何从 iptables 中删除特定规则?