#python #jquery-animate
#python #jquery-анимировать
Вопрос:
Я очень новичок, но использую python для своей магистерской диссертации.
У меня есть файл .csv с координатами x и y, сгруппированными по «кадру». Я хотел бы анимировать ее, чтобы она была растущей линией по мере ее перемещения кадр за кадром, но я не могу понять, как это сделать.
Точки данных — это движения мыши, которые следуют за отдельным дельфином через видео с дрона. Таким образом, каждый x, y представляет размещение дельфина в видеокадре.
Это то, что у меня есть до сих пор:
df = pd.read_csv('/content/drive/My Drive/Thesis_Data/2016-07-17-1542_2A.csv',
usecols=['x', 'y','frame'])
df.head(10)
Вот как выглядят мои данные. У меня есть несколько тысяч точек.
frame x y
0 61 1057 487
1 61 1057 487
2 61 1057 487
3 61 1057 487
4 61 1057 487
5 61 1057 487
6 61 1057 487
7 61 1057 487
8 61 1057 487
9 61 1057 487
gr = df.groupby('frame')
mean_pos = gr.mean()
ax= df.plot("x", "y", color="r")
ax.set_title('mean trajectory')
Я хочу анимировать ее так, чтобы она перемещалась по кадру, как движущаяся линия.
Ответ №1:
Вы можете попробовать это:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import pandas as pd
# a sample dataframe with coordinates of random movement
xy = np.random.normal(0, 1, (100, 2)).cumsum(axis=0)
df = pd.DataFrame(xy, columns=["x", "y"])
# plot setup
fig, ax = plt.subplots(figsize=(4, 4))
ax.set_xlim(df["x"].min() - 2, df["x"].max() 2)
ax.set_ylim(df["y"].min() - 2, df["y"].max() 2)
xdata, ydata = [], []
ln, = plt.plot([], [], 'r-')
def update(i):
"""
updates the plot for each animation frame
"""
ln.set_data(df.iloc[0:i, 0], df.iloc[0:i, 1])
return ln,
# animate the plot
ani = FuncAnimation(fig,
update,
frames=len(df),
interval=100, # delay of each frame in miliseconds
blit=True)
plt.show()
Результат:
Примечание: Если вы хотите запустить это в Jupyter Notebook %matplotlib notebook
, сначала выполните волшебство.
Комментарии:
1. Спасибо. Я думаю, что я становлюсь ближе. Я получаю эту ошибку. Даже когда я пытаюсь воссоздать ваше предложение: RuntimeError: функция анимации должна возвращать последовательность объектов исполнителя.
2. @JillianBliss Прошу прощения, при внесении изменений я пропустил одну строку. Теперь все должно работать нормально.