Анимировать мою выходную траекторию в виде движущейся строки

#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 Прошу прощения, при внесении изменений я пропустил одну строку. Теперь все должно работать нормально.