Python 如何在matplotlib中移动点来设置三维参数化绘图的动画?

Python 如何在matplotlib中移动点来设置三维参数化绘图的动画?,python,matplotlib,Python,Matplotlib,我试着使用下面的代码,但它只是让我的曲线增长,而不是它前面的一点 from matplotlib import pyplot as plt import numpy as np import mpl_toolkits.mplot3d.axes3d as p3 from matplotlib import animation fig = plt.figure() ax = p3.Axes3D(fig) def gen(n): phi = 0 while phi < 2*n

我试着使用下面的代码,但它只是让我的曲线增长,而不是它前面的一点

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

fig = plt.figure()
ax = p3.Axes3D(fig)

def gen(n):
    phi = 0
    while phi < 2*np.pi:
        yield np.array([np.cos(phi), np.sin(phi), phi])
        phi += 2*np.pi/n

def update(num, data, line):
    line.set_data(data[:2, :num])
    line.set_3d_properties(data[2, :num])

N = 100
data = np.array(list(gen(N))).T
line, = ax.plot(data[0, 0:1], data[1, 0:1], data[2, 0:1])

# Setting the axes properties
ax.set_xlim3d([-1.0, 1.0])
ax.set_xlabel('X')

ax.set_ylim3d([-1.0, 1.0])
ax.set_ylabel('Y')

ax.set_zlim3d([0.0, 10.0])
ax.set_zlabel('Z')

ani = animation.FuncAnimation(fig, update, N, fargs=(data, line), interval=10000/N, blit=False)
#ani.save('matplot003.gif', writer='imagemagick')
plt.show()
从matplotlib导入pyplot作为plt
将numpy作为np导入
将mpl_toolkits.mplot3d.axes3d作为p3导入
从matplotlib导入动画
图=plt.图()
ax=p3.Axes3D(图)
def发电机(n):
φ=0
当φ<2*np.pi时:
产生np.数组([np.cos(phi),np.sin(phi),phi])
φ+=2*np.pi/n
def更新(数值、数据、行):
line.set_数据(数据[:2,:num])
line.set_3d_属性(数据[2,:num])
N=100
data=np.array(list(gen(N))).T
直线,=ax.plot(数据[0,0:1],数据[1,0:1],数据[2,0:1])
#设置轴属性
ax.set_xlim3d([-1.0,1.0])
ax.set_xlabel('X')
ax.set_ylim3d([-1.0,1.0])
ax.set_ylabel('Y'))
ax.set_zlim3d([0.0,10.0])
ax.set_zlabel('Z'))
ani=animation.FuncAnimation(图,更新,N,fargs=(数据,行),间隔=10000/N,blit=False)
#ani.save('matplot003.gif',writer='imagemagick')
plt.show()

我想要的是它前面的一个点标记,它可以移动但不会复制!谢谢你花时间写下急需的答案。

你想要一个在你的线的“尖端”移动的点吗?如果是这样,一种简单的方法是在调用
plot
时使用
markevery=
,只在直线的最后一点上有一个标记

(...)
line, = ax.plot(data[0, 0:1], data[1, 0:1], data[2, 0:1], 'o-', mfc='r', mec='r', markersize=10, markevery=[-1])
(...)