2016-11-12 6 views
2

私は、ムービーの矢印がページを横切って移動するmatplotlibアニメーションを作成しています。これは、u、vコンポーネントを更新するためのset_UVCメソッドがありますが、xを変更する同等の方法はないため、通常の方法(1つのQuiverオブジェクトを作成し、それをアニメーションの各フレームで更新する)では達成できません。 、矢印のy位置。したがって、私は各フレームの新しいQuiverオブジェクトを作成しています。matplotlibアニメーションを保存するときに以前のフレームがクリアされない

これは、plt.show()を実行してアニメーションが画面に描画されたときに正常に動作します。矢印はページを横切って左から右に移動し、1つの矢印が表示されると前の矢印が消えます。これが私が望むものです。しかし、私がgifやmp4として保存すると、以前の矢印はクリアされないので、矢印の全体が表示されます。これをどうすれば解決できますか?次のように

私のコードは次のとおり

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.animation 

n = 21 
x = np.linspace(-1.0, 1.0, num=n) 
def animate(i): 
    q = plt.quiver(x[i:i+1], [0], [1], [0]) 
    return q, 

plt.gca().set_xlim([-1, 1]) 
anim = matplotlib.animation.FuncAnimation(plt.gcf(), animate, frames=n, 
              repeat=True, blit=True) 

plt.show() 
#anim.save('anim.gif', dpi=80, writer='imagemagick') 
#anim.save('anim.mp4', dpi=80, writer='ffmpeg') 
+0

設定は透過的なフィギュアパッチ用ですか? 'matplotlib.rcParams ['savefig.frameon']'を使って確認することができます。これは 'True'でなければなりません。新しいパッチには堅実な背景(http://matplotlib.org/api/pyplot_api.html)を設定するか、 'anim.save(' anim.mp4 '、[..etc ..]、extra_args = {' frameon ':True})を使用した引数 '(http://matplotlib.org/api/animation_api.html) – slushy

+0

これをチェックする矢印の位置を変更する:http://stackoverflow.com/questions/17758942/is-it-possible-to-update-matplotlib-quiver-position-coordinates-in-an-animation –

+1

q.set_offsetsを推奨として使用する@Jeanによって完全に動作します。ありがとうございました! –

答えて

1

上記ジャンセバスチャンによって示唆されるように溶液を、here見出されます。私のコードは次のようになります:

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.animation 

n = 21 
x = np.linspace(-1.0, 1.0, num=n) 
q = plt.quiver(x[:1], [0], [1], [0]) 
def animate(i): 
    q.set_offsets([[x[i], 0]]) 
    return q, 

plt.gca().set_xlim([-1, 1]) 
anim = matplotlib.animation.FuncAnimation(plt.gcf(), animate, frames=n, 
              repeat=True, blit=True) 

plt.show() 
#anim.save('anim.gif', dpi=80, writer='imagemagick') 
#anim.save('anim.mp4', dpi=80, writer='ffmpeg') 
関連する問題