はアニメーションでcontour
プロットを使用する方法の例です。それは、blitをオンまたはオフにするのを容易にするmatplotlib.animation.FuncAnimation
を使用します。 blit = Trueの場合、私のマシン上で~64 fpsで実行され、〜55 fpsでblitせずに実行されます。もちろん、interval
は高速アニメーションを可能にする必要があります。 interval=10
(ミリ秒)に設定すると、最大100fpsが可能になりますが、描画時間はそれよりも遅いものに制限されます。
import matplotlib.pyplot as plt
import matplotlib.animation
import numpy as np
import time
x= np.linspace(0,3*np.pi)
X,Y = np.meshgrid(x,x)
f = lambda x,y, alpha, beta :(np.sin(X+alpha)+np.sin(Y*(1+np.sin(beta)*.4)+alpha))**2
alpha=np.linspace(0, 2*np.pi, num=34)
levels= 10
cmap=plt.cm.magma
fig, ax=plt.subplots()
props = dict(boxstyle='round', facecolor='wheat')
timelabel = ax.text(0.9,0.9, "", transform=ax.transAxes, ha="right", bbox=props)
t = np.ones(10)*time.time()
p = [ax.contour(X,Y,f(X,Y,0,0), levels, cmap=cmap) ]
def update(i):
for tp in p[0].collections:
tp.remove()
p[0] = ax.contour(X,Y,f(X,Y,alpha[i],alpha[i]), levels, cmap= cmap)
t[1:] = t[0:-1]
t[0] = time.time()
timelabel.set_text("{:.3f} fps".format(-1./np.diff(t).mean()))
return p[0].collections+[timelabel]
ani = matplotlib.animation.FuncAnimation(fig, update, frames=len(alpha),
interval=10, blit=True, repeat=True)
plt.show()

画像を保存するプロセスは少し時間がかかるので、アニメーションGIFに遅いフレームレートが、示されている上にあることに注意してください。
プロットを更新できる速度は、(a)新しいデータを計算するのにかかる時間と(b)軸を描画するのにかかる時間の2つに依存します。あなたのケースではどちらが時間がかかるのかは一般に難しいです。残念なことに、 'contour 'はすべての反復でデータを再計算する必要があるため、期待される利益はほとんどありません。描画時間は、ブリッティングを使用することによって潜在的に減少する可能性がありますが、これにより7〜30fpsになることは間違いありません。 – ImportanceOfBeingErnest
さて、もっと輪郭を追加しても、fpsは大幅に減少しません。今度は6輪郭を試しました。私は5.5~6.5fpsを得ました.7~5.5fpsが得られたとき、matplotlibに何か起こっていることが永久にアニメーション化するプロットを更新するときに起こります。また、輪郭プロットのメッシュ密度を大幅に下げると、フレームレートがわずかにfpsだけ増加します。 – UN4
これは[blitting](http://stackoverflow.com/questions/40126176/fast-live-plotting-in-matplotlib-pyplot)のように聞こえるのは確かに利点があります。 – ImportanceOfBeingErnest