プロが教える店舗&オフィスのセキュリティ対策術

以下のPythonのプログラムでアペンドしたp_listの内容をアニメーションした後にみたいのですが、
print(p_list)
は、[0, 0, 0]
になってしまう様なのですが、何故なのでしょうか?

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

fig = plt.figure()
ax = fig.add_subplot()
ax.set_xlim(0, 100) # 座標軸の設定(x座標)
ax.set_ylim(0, 100) # 座標軸の設定(y座標)
ax.set_aspect('equal')

point = ax.plot([], [], 'ro', ms=20)[0]
point1 = ax.plot([], [], 'ro', ms=20)[0]
point2 = ax.plot([], [], 'ro', ms=20)[0]
point3 = ax.plot([], [], 'ro', ms=20)[0]

p_list = [0, 0, 0]

def update(t):
 g = -9.8 * 0.01
 v0 = 4
 y = v0 * t + 0.5 * g * t**2
 p_list.append(y)
 point.set_data([50], p_list[t + 3])
 point1.set_data([50], p_list[t + 2])
 point1.set_alpha(0.6)
 point2.set_data([50], p_list[t + 1])
 point2.set_alpha(0.4)
 point3.set_data([50], p_list[t + 0])
 point3.set_alpha(0.2)
 return point, point1, point2, point3

ani = FuncAnimation(fig, update, frames=100,
interval=20, repeat=False)

print(p_list)
plt.show()

A 回答 (1件)

plt.show()が実行されるまでは、aniが処理されないからだと。


明示的にsaveやらを呼び出してaniを実行すれば、更新されたp_listが得られると思います。
    • good
    • 0
この回答へのお礼

この場合、p_listは書き換えられているので、
p_list.append(y)
の前に、
global p_list
の記述は必要ないんでしょうか?
結果は、あっても無くても同じようですが。
appendには、global p_listの記述は必要ないって事なのでしょうか?

お礼日時:2023/06/01 20:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!