我有两组 x,y 坐标,描述了两颗行星随时间绕太阳运行的运动。我的作业要求我使用 Matplotlib 在 Python 中为这些数据制作动画,但我的教学大纲并没有很好地涵盖它。我已经在MatPlotLib 的文档的帮助下成功制作了轨迹动画,但我无法在行星的当前位置显示移动点:
import matplotlib.pylab as plt
import matplotlib.animation as animation
earthx = planetRs[0][0] #these are arrays of x and y coordinates of Earth and Mars
earthy = planetRs[0][1]
marsx = planetRs[2][0]
marsy = planetRs[2][1]
fig, ax = plt.subplots()
line1 = ax.plot(marsx[0], marsy[0], label='Mars')[0]
line2 = ax.plot(earthx[0], earthy[0], label='Earth')[0]
ax.set(xlim=[-2, 2], ylim=[-2, 2], xlabel='X position', ylabel='Y position')
ax.legend()
def update(frame):
line1.set_xdata(marsx[:frame])
line1.set_ydata(marsy[:frame])
line2.set_xdata(earthx[:frame])
line2.set_ydata(earthy[:frame])
return line1, line2
ani = animation.FuncAnimation(fig=fig, func=update, frames=60, interval=30)
plt.close()
ani
每次我尝试时,它都会变成一条在每个 x,y 坐标处带有点的线。我希望这些点仅显示两个行星最近的 x,y 位置。有人可以帮我吗?
您可以为地球和火星绘制单个点,然后将每个点的位置更新为当前帧坐标。
import matplotlib.pyplot as plt
import matplotlib.animation as animation
earthx = planetRs[0][0]
earthy = planetRs[0][1]
marsx = planetRs[2][0]
marsy = planetRs[2][1]
fig, ax = plt.subplots()
line1, = ax.plot([], [], 'bo', label='Earth') # Earth
line2, = ax.plot([], [], 'ro', label='Mars') # Mars
ax.set(xlim=[-2, 2], ylim=[-2, 2], xlabel='X position', ylabel='Y position')
ax.legend()
ax.grid(False)
def init():
line1.set_data([], [])
line2.set_data([], [])
return line1, line2
def update(frame):
line1.set_data(earthx[frame], earthy[frame])
line2.set_data(marsx[frame], marsy[frame])
return line1, line2
ani = animation.FuncAnimation(
fig, update,
frames=len(earthx),
init_func=init,
interval=30,
blit=True,
)
plt.close()
ani