2017-04-05 33 views
1

matplotlibサイトexampleに基づいて次のコードを書きました。(python)matplotlibアニメーションが表示されない

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

fig = plt.figure() 
nFreqs = 1024 
nFFTWindows = 512 
viewport = np.ones((nFreqs, nFFTWindows)) 
im = plt.imshow(viewport, animated=True) 


def updatefig(*args): 
    global viewport 
    print viewport 
    viewport = np.roll(viewport, -1, axis=1) 
    viewport[:, -1] = 0 
    im.set_array(viewport) 
    return im, 


ani = animation.FuncAnimation(fig, updatefig, interval=50, blit=True) 
plt.show() 

アニメーションを変更する前に動作しますが、現在は動作しません。私は紫色のプロットから始めることを期待しました。それは、ゆっくりと右端から左に黄色に変わります。 viewport変数が正しく更新されます(私の機能ではprintにチェックされています)。

(それが最初だったように、すべてのものを)私は、静的な画像を取得する:私はここで間違って行くのです

enter image description here

答えて

2

問題は、最初に単色(1.0)でプロットを定義して、色の範囲がこれに設定されていることです。 Figureを更新すると、色の範囲は1.0 +です。小さい値なので、変更が表示されません。あなたは次のように、1〜ゼロvmin/vmaxとの引数に色の範囲を設定する必要があります。

im = plt.imshow(viewport, animated=True, vmin=0., vmax=1.) 

コードの残りの部分は同じままで、期待通り、これは動作するはずです。別の方法としては、毎回更新される色の範囲を強制的にim.set_array(viewpoint)後、

im.autoscale() 

を呼び出しを追加することです。

+0

ありがとう、魅力的な作品 –

0

imshowプロットは1つの値(この場合は1)で初期化されるため、1と1の間の範囲に正規化された値はすべて同じ色になります。

これを変更するためには、

  1. 色(vmin=0, vmax=1)の制限にimshowプロットを開始することができます。
  2. は正規インスタンスとimshowプロットim.set_clim(0,1)を使用してその後の制限を設定

    norm = matplotlib.colors.Normalize(vmin=0, vmax=1) 
    im = plt.imshow(arr, norm=norm) 
    
  3. を開始します。
関連する問題