2017-04-05 106 views
1

我写的基础上,matplotlib网站example下面的代码。(蟒蛇)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),以使颜色范围设定此。当你更新图形时,颜色范围是1.0 + - 一些小值,所以你看不到变化。您需要的颜色范围设定为参数1和0与vminvmax之间/如下:

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

代码的其余部分保持不变,并预期这应该工作。另一种选择是im.set_array(viewpoint)后添加呼叫,

im.autoscale() 

迫使色彩范围内的每个时间进行更新。

+0

感谢的人,就像一个魅力 –

0

imshow情节与一个单一值(1在这种情况下)初始化,因此归一化至范围为1和1之间的任何值变为相同的颜色。

为了改变这一点,你可以

  1. 开始imshow情节与色彩(vmin=0, vmax=1)的限制。
  2. 开始imshow情节与规范化实例

    norm = matplotlib.colors.Normalize(vmin=0, vmax=1) 
    im = plt.imshow(arr, norm=norm) 
    
  3. 极限之后使用im.set_clim(0,1)设置。