0
Pythonでmatplotlibを使用している小さなコードで悩んでいます。私はpythonでmatplotlibパッケージを使用してPythonで2台のボックスカーをアニメーション化しようとしていますが、私はanimate
の両方の車のx座標を同時に更新することはできません。matplotlibのfuncAnimationへの引数の追加
最小限の作業例を以下に示す:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.animation as animation
# Complete length of trajectory
maxL = 2000
# Initial positions and velocities of lead and host cars
xl = 30
vl = 5
xh = 0
vh = 5
# Step size
dt = 0.1
lead = np.matrix([[xl,vl]])
host = np.matrix([[xh,vh]])
while xl < maxL:
xl = xl + vl*dt
lead = np.concatenate((lead,[[xl,vl]]), axis = 0)
xh = xh + vh*dt
host = np.concatenate((host,[[xh,vh]]), axis = 0)
road_width = 3;
fig1 = plt.figure(1)
ax = fig1.add_subplot(111)
rect_l = patches.Rectangle(
(lead[0,0], road_width/2), # (x,y)
10, # width
1, # height
facecolor = "red", # remove background
)
rect_h = patches.Rectangle(
(host[0,0], road_width/2), # (x,y)
10, # width
1, # height
facecolor = "blue", # remove background
)
ax.add_patch(rect_l)
ax.add_patch(rect_h)
def init():
plt.plot([0,maxL],[road_width,road_width],'k-')
plt.plot([0,maxL],[-road_width,-road_width],'k-')
plt.plot([0,maxL],[0,0],'k--')
return []
#### This works #####
def animate(x1):
rect_l.set_x(x1)
return rect_l,
plt.axis([0, maxL, -10, 10])
plt.xlabel('time (s)')
plt.ylabel('road')
plt.title('Car simulation')
ani = animation.FuncAnimation(fig1, animate, lead[:,0], init_func = init, interval=0.1, blit=False)
plt.show()
しかし、私は以下のような何かをしたいです。このコードを実行するとPythonがクラッシュします。
def animate(x1,x2):
rect_l.set_x(x1)
rect_h.set_x(x2)
return rect_l,rect_h,
plt.axis([0, maxL, -10, 10])
plt.xlabel('time (s)')
plt.ylabel('road')
plt.title('Car simulation')
ani = animation.FuncAnimation(fig1, animate, (lead[:,0],host[:,0]), init_func = init, interval=0.1, blit=False)
plt.show()
ありがとうございました。それは動作します。 – shunyo