动画3d空间中的片段

时间:2014-12-11 16:56:48

标签: python animation matplotlib

我有一个.dat文件,其中包含3d空间中段的坐标。 该文件有几行,每行代表特定时间的位置。

我试过这段代码:

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

dati = np.loadtxt('dati.dat')
t=0
p1=[dati[t,1],dati[t,2],dati[t,3]]
p2=[dati[t,4],dati[t,5],dati[t,6]]

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

seg,=ax.plot(p1,p2)

def updateFigure(t,dati,seg):
    p1=[dati[t,1],dati[t,2],dati[t,3]]
    p2=[dati[t,4],dati[t,5],dati[t,6]]
    seg.set_data(p1,p2)
    return seg,

ani=animation.FuncAnimation(fig, updateFigure,iMax, fargs=(dati,seg), interval=100, blit=True)
plt.show()

该程序不会报告错误,但数字不会移动。 在2d空间中相同的代码,稍微修改一下..

1 个答案:

答案 0 :(得分:0)

您可以直接设置set_data,而不是调用seg._verts3d,但请注意,操纵私有变量_verts3d依赖于实现细节,而不是Line3D公共接口的一部分:< / p>

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

iMax = N = 500
theta = np.linspace(0, 6*np.pi, N)
x = np.cos(theta)
y = np.sin(theta)
z = np.linspace(0, 1, N)
step = 10
dati = np.column_stack(
    [theta, x, np.roll(x, -step), np.roll(x, -2*step)
     , y, np.roll(y, -step), np.roll(y, -2*step)
     , z, np.roll(z, -step), np.roll(z, -2*step)])

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
seg, = plt.plot([], [])

ax.set_xlim3d(-1, 1)
ax.set_ylim3d(-1, 1)
ax.set_zlim3d(0, 1)

def init():
    return seg,

def updateFigure(t):
    p1 = dati[t, 1:4]
    p2 = dati[t, 4:7]
    p3 = dati[t, 7:10]
    seg._verts3d = (p1, p2, p3)
    return seg,

ani = animation.FuncAnimation(
    fig, updateFigure
    , init_func=init
    , frames=iMax
    , interval=5, blit=True)
plt.show()