#python #arrays #matplotlib #animation #matplotlib-animation
#python #массивы #matplotlib #Анимация #matplotlib-анимация
Вопрос:
Я работал над проблемой с 2 телами, которая включает анимацию планеты вокруг звезды. Я хочу, чтобы моя планета оставляла небольшой след при перемещении чего-то подобного. Мой код отображает все идеально, кроме одной вещи. Я не могу получить след планеты.
fig, ax = plt.subplots()
print(func(0.98, -np.pi, 0, 0, 0.001))
ax.set(xlim = (-1.2,1.5), ylim = (-1.5,1.5), xlabel = 'x axis', ylabel='y axis', title = 'Planet's orbit')
def polar_animator(i):
trail = 40
l1.set_data(x_graph[i-1:i], y_graph[i-1:i])
return l1,
l1, = ax.plot([],[], 'o-')
l2, = ax.plot([-0.8],[0],marker= 'o')
ani = animation.FuncAnimation(fig, polar_animator, frames= len(x_graph), interval=5, blit=True)
ani.save('planet.mp4', writer= 'ffmpeg')
Результат, который я получаю, — это просто шар, движущийся вокруг солнца.
Ответ №1:
Я думаю, вы были довольно близки. Изменения, которые я внес, были:
- сохраните последнюю
trail
точку для отображения на графике (вы показывали только последние 2 точки) - используйте
markevery=[-1]
вplot()
вызове, чтобы показывать маркер только в конце строки.
полный код:
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
x_graph = np.linspace(0, 1, 100)
y_graph = x_graph
trail = 40
fig, ax = plt.subplots()
ax.set(xlim=(-1.2, 1.5), ylim=(-1.5, 1.5), xlabel='x axis', ylabel='y axis', title='Planet's orbit')
def polar_animator(i, trail=40):
l1.set_data(x_graph[i - trail:i], y_graph[i - trail:i])
return l1,
l1, = ax.plot([], [], 'o-', markevery=[-1])
l2, = ax.plot([-0.8], [0], marker='o')
ani = animation.FuncAnimation(fig, polar_animator, frames=len(x_graph), fargs=(trail,), interval=5, blit=True)
Комментарии:
1. Это отлично работает, спасибо. Что делает markevery? Можете ли вы объяснить?