1

我有以下代码。

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 值的队列。我只想绘制队列中的点,以便随着队列的变化,情节也应该改变。我该怎么做?

注意:这是具有挑战性的,因为队列的大小是有限的,并且情节必须仅反映队列中的内容。

4

1 回答 1

2

这样做的hacky方法是:

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

动画模块很好地封装了做动画所需的许多东西(包括一种将输出直接流式传输到 ffmpeg 的方法),并且有一个非常好的教程

Line3D文档,Line2D文档

于 2012-12-31T04:29:22.840 回答