我有三个圆的位置数据,我想制作这些移动圆的动画。我看过很多函数的动画,但我无法制作几何形状的动画。下面是我写的一些代码,用来创建三个圆在时间变化位置的图。
import matplotlib.pyplot as plt
import numpy as np
# Just a minimal example mock data
positions=np.zeros((3,2,100))
positions[0,0,:]=np.linspace(-10,10,100)
positions[0,1,:]=np.linspace(-10,10,100)
positions[1,0,:]=7*np.cos(np.linspace(0,30,100))
positions[1,1,:]=7*np.sin(np.linspace(0,30,100))
positions[2,0,:]=5*np.sin(np.linspace(0,30,100))
positions[2,1,:]=np.linspace(-10,10,100)
# My code
for i in range(100):
fig, ax = plt.subplots()
ax.set_xlim(-10, 10)
ax.set_ylim(-10, 10)
circle1=plt.Circle((positions[0,0,i], positions[0,1,i]),1)
circle2=plt.Circle((positions[1,0,i], positions[1,1,i]),1)
circle3=plt.Circle((positions[2,0,i], positions[2,1,i]),1)
ax.add_patch(circle1)
ax.add_patch(circle2)
ax.add_patch(circle3)
ax.axis("equal")
positions是一个数组:第一个索引标记不同的圆,第二个索引标记x和y坐标,第三个索引标记第i个时间步长。我能够随着这些形状的位置变化来创建它们的绘图。但是现在我想把这些图像放在一起来制作一个动画。
1条答案
按热度按时间3bygqnnd1#
需要调用animate函数。
(还有其他方法。根据绘制绘图的方式,您可以自己循环,并更新数据。但对于这种动画,animate更好)。
所以,粗略地说,除了大量的注解,这是你的代码+ 3行代码,
set_center
在每个循环中要做的,你自己的循环只做一次。这里的循环是由FuncAnimation
迭代地调用animate
回调完成的。而且,我会编辑你的问题,包括“最小可重复的例子”(但如果你认为这与你的意图相矛盾,你可以自由地编辑回来)。我鼓励你在未来的问题中尝试使用同样的例子。