我有以下代码。
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值的队列。我想只绘制队列中的点,以便队列更改时,绘图也应该更改。我该怎么做?
注意:这很有挑战性,因为队列的大小有限,而且情节只能反映队列中的什么。
答案 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。