Pythonでmatplotlibを使ってアニメーションを作りたいと思っています。アニメーション データは 2 つのパラメーター (時間、ボディ数) の関数であるため、2 つの for ループを使用するというアイデアを得ました。コードは以下のとおりです。
import time
import matplotlib as mpl
from matplotlib import pyplot as plt
from matplotlib import pylab as plb
# set up figure for plotting:
fig = plt.figure()
ax = fig.add_subplot(111)
# plot limits
ax.set_xlim(-(max(q0) + bodies[-1].L), +(max(q0) + bodies[-1].L))
ax.set_ylim(-(max(q0) + bodies[-1].L), +(max(q0) + bodies[-1].L))
# colors
colors = ['b', 'g', 'c']
for i_t in range(0, np.shape(t)[1]): #t is an one column matrix
for i in range(0, N):
ax.plot(x_matrix[i_t, i], y_matrix[i_t, i], 's', color=colors[i])
plt.draw()
plt.show()
問題は、コードが 1 つのプロットを生成することですが、すべての点がアニメーション化されていることです。前のプロットが次の時間ステップで消去されるように、1 つの時間値 (カウンター i_t) とすべてのボディ (カウンター i) のアニメーションを 1 つのウィンドウにムービーとしてプロットしたいと考えています。
あなたが提案したコードを次のように変更しました。
for i_t in range(0, np.shape(t)[1]):
for i in range(0, N):
ax.clear()
ax.plot(x_matrix[i_t, i], y_matrix[i_t, i], 's', color=colors[i])
plt.pause(0.001)
plt.draw()
しかし、その後エラーが発生します:
C:\Python27\lib\site-packages\matplotlib\backend_bases.py:2292: MatplotlibDeprecationWarning: この GUI に固有の機能が実装されるまでデフォルトのイベント ループを使用しています warnings.warn(str, mplDeprecation)
それはそれほど恐ろしいことではありませんが、コードを実行すると、一緒にプロットする必要があるポイント (カウンター i) が離れてプロットされるため、点滅するドットのように見えます (私の言いたいことがわかっている場合)。
助言がありますか。私は解決策に近づいていると思いますが、コードを機能させるにはまだ仕上げが必要です。これが私が想像した方法で実行できることを願っているので、別のアプローチで問題を解決する必要はありません。