将我的输出轨迹动画化为一条移动线
Animate my output trajectory to be a moving line
我是一个新手,但我的硕士论文使用python。
我有一个按 'frame' 分组的 x 和 y 坐标的 .csv。我想为它设置动画,使其成为一条不断增长的线,因为它逐帧移动,但我不知道该怎么做。
数据点是通过无人机视频跟踪单个海豚的鼠标移动。所以每个 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')
output trajectory
我想为其设置动画,使其像移动线一样逐帧移动。
你可以试试这个:
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
魔法。
我是一个新手,但我的硕士论文使用python。
我有一个按 'frame' 分组的 x 和 y 坐标的 .csv。我想为它设置动画,使其成为一条不断增长的线,因为它逐帧移动,但我不知道该怎么做。
数据点是通过无人机视频跟踪单个海豚的鼠标移动。所以每个 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')
output trajectory
我想为其设置动画,使其像移动线一样逐帧移动。
你可以试试这个:
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
魔法。