我从文本文件加载x,y坐标和偏航角。这些坐标是正方形中间的坐标,偏航是正方形与x轴的角度。在我的文本文件中,坐标正在变化。我想制作一个动画,其中正方形将移动(跟随文件的坐标)并具有精确的偏航角。一个动画刻度应代表一个方形运动。我尝试过这段代码,这是非常糟糕的,无法正常工作。有任何想法吗?谢谢。现在,我使用左下角而不是正方形的中间。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib as mpl
from matplotlib import animation
file_name = "Crobot_test_log.txt"
x = np.loadtxt(file_name, usecols=(0,))
y = np.loadtxt(file_name, usecols=(1,))
yaw = np.loadtxt(file_name, usecols=(2,))
#x = [0,1,2]
#y = [0,1,2]
#yaw = [0.0,0.5,1.3]
fig = plt.figure()
plt.axis('equal')
plt.grid()
ax = fig.add_subplot(111)
ax.set_xlim(-10, 10)
ax.set_ylim(-10, 10)
patch = patches.Rectangle((x[0],y[0]),1.2,1.0,fc ='y',angle = -np.rad2deg(yaw[0]))
def init():
ax.add_patch(patch)
return patch,
def animate(i):
patch = patches.Rectangle((x[i],y[i]),1.2,1.0,fc ='y',angle = -np.rad2deg(yaw[i]))
return patch,
anim = animation.FuncAnimation(fig, animate,
init_func=init,
frames=360,
interval=1,
blit=True)
plt.show()
答案 0 :(得分:7)
不是在animate
中创建新的矩形,而是使用set_*
方法修改现有的patch
:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib import animation
x = [0, 1, 2]
y = [0, 1, 2]
yaw = [0.0, 0.5, 1.3]
fig = plt.figure()
plt.axis('equal')
plt.grid()
ax = fig.add_subplot(111)
ax.set_xlim(-10, 10)
ax.set_ylim(-10, 10)
patch = patches.Rectangle((0, 0), 0, 0, fc='y')
def init():
ax.add_patch(patch)
return patch,
def animate(i):
patch.set_width(1.2)
patch.set_height(1.0)
patch.set_xy([x[i], y[i]])
patch._angle = -np.rad2deg(yaw[i])
return patch,
anim = animation.FuncAnimation(fig, animate,
init_func=init,
frames=len(x),
interval=500,
blit=True)
plt.show()