2013-01-02 9 views
8

をmatplotlibの:) http://www.mail-archive.com/[email protected]/msg17614.htmlhttp://matplotlib.1069221.n5.nabble.com/Matplotlib-1-1-0-animation-vs-contour-plots-td18703.htmlhttp://www.scipy.org/Cookbook/Matplotlib/Gridding_irregularly_spaced_dataアニメーションは、私はに基づいてmatplotlibの中に輪郭1.1.0</p> <p>をアニメーション化しようとしています

from numpy import linspace,exp,vstack 
from scipy.interpolate import griddata 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 
from numpy.random import uniform, seed 

def main(): 
    seed(1234) 
    x = uniform(-2,2,100) 
    y = uniform(-2,2,100) 
    data = vstack((x*exp(-x**2-y**2),0.5*x*exp(-x**2-y**2),0.2*x*exp(-x**2-y**2))) 
    xi = linspace(min(x), max(x)) 
    yi = linspace(min(y), max(y)) 
    zi = [] 
    numframes = data.shape[0] 
    for ii in range(numframes): 
     zi.append(griddata((x, y), data[ii], (xi[None,:], yi[:,None]), method='cubic')) 

    fig = plt.figure() 
    im = plt.contour(xi, yi, zi[0], 15, linewidths=0.5, colors='k') 
    ani = animation.FuncAnimation(fig, update_contour_plot, frames=xrange(numframes), fargs=(zi, im, fig, xi, yi), interval=100) 
    plt.colorbar() 
    plt.show() 

def update_contour_plot(i, data, im, fig, xi, yi): 
    for coll in im.collections: 
     try: 
      plt.gca().collections.remove(coll) 
     except ValueError: #Everything is not removed for some reason!                      
      pass 
    im = plt.contour(xi, yi, data[i], 15, linewidths=0.5, colors='k') 
    plt.title(str(i)) 
    return im, 

main() 

1これは、これを行うための最善の方法です?それ以外の言及。

2)最終出力では、前のフレームの等高線が引き続き表示されます。どうすれば削除できますか?

+0

「ValueError」にはどのメッセージも付いていますか?試しなし – tacaswell

+0

:除く:。読み出しは plt.gca()collections.remove(コル) とValueErrorです:list.remove(x)は:リスト:良い例コード – chaitu

+0

+1でないxは.remove(x):xはリストにありません – tacaswell

答えて

1

拡大鏡で作成した新しいimが戻ってきていないので、2回目にループの最初のレイヤーを削除しようとしています。あなたがすでにそれらを削除したので、それはできないと正当に訴えます。あなたのコードビットを微調整

def main(): 
    seed(1234) 
    x = uniform(-2,2,100) 
    y = uniform(-2,2,100) 
    data = vstack((x*exp(-x**2-y**2),0.5*x*exp(-x**2-y**2),0.2*x*exp(-x**2-y**2))) 
    xi = linspace(min(x), max(x)) 
    yi = linspace(min(y), max(y)) 
    zi = [] 
    numframes = data.shape[0] 
    for ii in range(numframes): 
     zi.append(griddata((x, y), data[ii], (xi[None,:], yi[:,None]), method='cubic')) 

    fig = plt.figure() 
    im = plt.contour(xi, yi, zi[0], 15, linewidths=0.5, colors='k') 
    ax = fig.gca() 
    ani = animation.FuncAnimation(fig, update_contour_plot, frames=xrange(numframes), fargs=(zi, ax, fig, xi, yi), interval=100) 
    plt.colorbar(im) 
    plt.show() 
    return ani 


def update_contour_plot(i, data, ax, fig, xi, yi): 
    ax.cla() 
    im = ax.contour(xi, yi, data[i], 15, linewidths=0.5, colors='k') 
    plt.title(str(i)) 
    return im, 

別のオプションは、あなたの変更がフレームにフレームから伝播するように(のような辞書でそれをラップ)ある種のim可変にすることです。

+0

とValueErrorのためにリスト – chaitu

+0

@chaitu編集を参照してください。 – tacaswell

+0

現在動作中です。ありがとうございました! – chaitu

関連する問題