10

実際にこれらの関数を再度呼び出したり、新しい図や軸などを作成したりすることなく、 で行われた輪郭、 で行わcontour()れたベクトル フィールドquiver()、および で行われた画像を更新できるかどうかを知りたいです。imshow()ルーチンを再呼び出しせずに Figure のこれらの要素を更新することが可能です (そして、それは通常人々が行うことです)。

set_array()とに基づいて解決策を試しましたpyplot.draw()が、ベクトル場と等高線図では機能しません。

4

1 に答える 1

6

これは、画像imshowを呼び出してから図を呼び出すことで実行できます。呼び出しだけに比べて実際のパフォーマンス上の利点は見られません。どちらも、以下のベンチマークで約 25FPS を提供します (バックエンドとして使用)。.set_data()fig.canvas.draw()draw()WXAgg

import numpy as np
import matplotlib.pyplot as pp
import time

def animate_data(data):

    fig,ax = pp.subplots(1,1)

    # I'm not convinced that animated=True does anything either...
    image = ax.imshow(data[0,:,:],animated=True)

    # pp.draw()
    fig.canvas.draw()

    start = time.time()
    tic = start
    for ii in xrange(1,data.shape[0]):
        if not(ii % 10):
            toc = time.time()
            print "FPS =\t%.6G" %(10./(toc-tic))
            tic = time.time()
        image.set_data(data[ii,:,:])

        # pp.draw()
        fig.canvas.draw()

    print "Average FPS =\t%.6G" %(data.shape[0]/(time.time()-start))

fakedata = np.random.randn(200,512,512)
animate_data(fakedata)

の場合quiver、 を使用.set_UVC()してプロットを更新できます。

fig,ax = subplots(1,1)

u1 = np.random.rand(10,10)
v1 = np.random.rand(10,10)
c1 = np.random.rand(10,10)

q = ax.quiver(u1,v1,c1)
fig.canvas.draw()

u2 = np.random.rand(10,10)
v2 = np.random.rand(10,10)
c2 = np.random.rand(10,10)

q.set_UVC(u2,v2,c2)
fig.canvas.draw()

私が知る限りcontour、同じ方法でプロットを更新することはできません。いずれにしても、特定の配列入力に対して等高線がどこに行くべきかを再計算する必要があるため、とにかく多くのことを得ることができるかどうかはわかりません。私があなたなら、 と に電話ax.contour()fig.canvas.draw()ます。

于 2012-09-03T20:52:05.500 に答える