我正试着用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版本):
注意一些变化:
plt.pause(0.05)
来绘制新数据并运行GUI的事件循环(允许鼠标交互)。如果你对实时绘图感兴趣,我建议你研究一下matplotlib's animation API。特别是,使用
blit
来避免在每帧上重新绘制背景,可以获得可观的速度增益(~10x):输出:
show
可能不是最好的选择。我要做的是用pyplot.draw()
代替。您还可能希望在循环中包含一个小的时间延迟(例如time.sleep(0.05)
),以便可以看到正在发生的绘图。如果我对你的示例做这些更改,它对我很有用,我看到每个点一次出现一个。相关问题 更多 >
编程相关推荐