我正在尝试根据跟踪数据(一组5点)来制作动画电影。
数据集格式
这5个点的x,y坐标位于一个总共10列的Pandas数据框中-每对列都是任意给定时间点的x,y坐标。每行给出1/10秒后的点的位置。样本看起来像这样-
x1 y1 x2 y2 x3 y3 x4 y4 x5 y5
0 1 3 2 1 9 1 1 1 8 1
1 5 7 5 5 7 5 5 8 4 5
2 7 1 7 9 7 5 4 8 0 7
3 3 5 4 6 3 6 9 7 3 0
绘图功能
我从各个角度创建动画的功能是:
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig, ax = plt.subplots()
df = pd.read_csv(file)
def _update_plot(i, fig, scat):
scat.set_offsets(([dff.iloc[i,0], dff.iloc[i,1]], [dff.iloc[i,2],dff.iloc[i,3]], [dff.iloc[i,4],dff.iloc[i,5]], [dff.iloc[i,6],dff.iloc[i,7]], [dff.iloc[i,8],dff.iloc[i,9]]))
return scat,
anim = animation.FuncAnimation(fig, _update_plot, fargs = (fig, scat),
frames = len(dff.index)-1, interval = 100)
对我来说没有任何问题。但是,我现在想根据要点创建一个Voronoi动画。我认为这就像从scipy.spatial
导入后将其添加到绘图功能一样简单:
vor = Voronoi(points) ##points are the rows of the `df`
voronoi_plot_2d(vor)
但是,那没有解决。没有任何错误,但没有任何变化。我被认为创建动画比我尝试的要复杂得多。
我想到的最终输出将与this video非常相似(当然,还有更多点)。 如何使用matplotlib创建动画?任何帮助将不胜感激。
答案 0 :(得分:0)
我认为这看起来让人想起您想要的东西。让我知道我是否正确。
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from io import StringIO
import numpy as np
from scipy.spatial import Voronoi, voronoi_plot_2d
df = pd.read_csv(StringIO("""
x1 y1 x2 y2 x3 y3 x4 y4 x5 y5
0 1 3 2 1 9 1 1 1 8 1
1 5 7 5 5 7 5 5 8 4 5
2 7 1 7 9 7 5 4 8 0 7
3 3 5 4 6 3 6 9 7 3 0"""),
sep='\s+')
fig, ax = plt.subplots(1, 1)
ax.set_xlim(df.iloc[:, ::2].values.min(),
df.iloc[:, ::2].values.max())
ax.set_ylim(df.iloc[:, 1::2].values.min(),
df.iloc[:, 1::2].values.max())
def updater(i):
ax.cla()
ax.scatter(df.iloc[i, ::2], df.iloc[i, 1::2])
vor = Voronoi(np.vstack((df.iloc[i, ::2], df.iloc[i, 1::2])).T)
voronoi_plot_2d(vor, ax=ax)
anim = animation.FuncAnimation(fig, updater,
frames=df.shape[0], interval=1000)