1

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) が離れてプロットされるため、点滅するドットのように見えます (私の言いたいことがわかっている場合)。

助言がありますか。私は解決策に近づいていると思いますが、コードを機能させるにはまだ仕上げが必要です。これが私が想像した方法で実行できることを願っているので、別のアプローチで問題を解決する必要はありません。

4

2 に答える 2

2

コードの最後のセクションを次のように変更します。

for i_t in range(np.shape(t)[1]):    #t is an one column matrix
    for i in range(N):
        ax.clear()
        ax.plot(x_matrix[i_t, i], y_matrix[i_t, i], 's', color=colors[i])
        plt.pause(0.001)
# eof

の数値を変更して、アニメーションの速度を調整しplt.pause(0.001)ます。

于 2013-06-03T14:47:53.907 に答える