如何绘制积分队列?

时间:2012-12-30 22:05:06

标签: python matplotlib queue

我有以下代码。

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
plt.ion()
plt.show()

mapping = defaultdict(partial(deque, maxlen=10))

我的映射结构包含一个带有x,y,z值的队列。我想只绘制队列中的点,以便队列更改时,绘图也应该更改。我该怎么做?

注意:这很有挑战性,因为队列的大小有限,而且情节只能反映队列中的什么。

1 个答案:

答案 0 :(得分:2)

执行此操作的黑客方法是:

ln, = ax.plot(x,y,z)
# some code that updates the x,y,z values -> new_x,new_y,new_z
ln.remove
ln, = ax.plot(new_x,new_y,new_z)
plt.draw()

删除旧数据的行,并添加一个新数据。

如果您愿意编写依赖于matplotlib内部的代码(这是一个坏主意,因为内部可能会在您之下发生变化),您也可以通过以下方式执行此操作:

ln._verts3d = new_x,new_y,new_z

在此处修补以添加执行此操作的功能:https://github.com/matplotlib/matplotlib/pull/1629

animation模块很好地包含了做动画所需的许多事情(包括直接将输出流式传输到ffmpeg的方法),并且有一个非常好的tutorial

Line3D docsLine2D docs