私はPythonとMatplotlibを使って簡単なアニメーションを作成しています。 私のコードは以下の通りです:Python、matplotlibのアニメーションと破線の衝突
import matplotlib
#matplotlib.use('TkAgg')
from matplotlib import animation as animation
from matplotlib import pyplot as plt
import numpy as np
def w(q): return np.exp(-q**2)
support_q = np.linspace(-10,10,200)
support_q1 = np.linspace(-10,10,30)
list_w = [[w(q-q1) for q in support_q] for q1 in support_q1]
fig = plt.figure()
ax = fig.add_subplot(111, xlabel='q', ylabel='w(q-q\')')
line_w, = ax.plot(support_q, list_w[0])
plt.axhline(dashes=[10], zorder=0)
ax.xaxis.major.locator.set_params(nbins=12)
ax.yaxis.major.locator.set_params(nbins=5)
def animate(i):
line_w.set_ydata(list_w[i])
return line_w,
anim = animation.FuncAnimation(fig, animate, frames=len(support_q1), interval=10, blit=False)
#anim.save('animation.mp4')
plt.show()
コードがスムーズに実行され、私が欲しいのアニメーションを生成します。しかし、私はちょうどアニメーションを表示する前に保存コマンドanim.save('animation.mp4')
が含まれている場合、私は次のエラーコードを取得する:
File "/Users/usr1/Library/Python/3.5/lib/python/site-packages/matplotlib/backends/backend_agg.py", line 166, in draw_path
self._renderer.draw_path(gc, path, transform, rgbFace)
ValueError: dashes sequence must have an even number of elements
私は正確に同じエラーが発生したのMac OS Xを使用していますが、私はアニメーションを保存する場合は代わりに複製されていますバックエンドをTkAgg(matplotlib.use('TkAgg')
を使用)に変更してみてください。 FuncAnimation
(here参照)にblit=True
オプションを使用したいが、このエラーのために実装することができないMacユーザーの場合、バックエンドを変更することは回避策です。
プロットに破線の軸が追加されていることから問題が発生していることがわかりました。つまり、私が行を削除すると、
plt.axhline(color='k', dashes=[10], zorder=0)
問題は消滅し、ValueErrorはありません。
何が起こっているのか考えている人はいますか?アニメーションモジュールは破線を処理できませんか?