动画剧情更新

动画剧情更新

问题描述:

我正在尝试查找正弦曲线的最大值并将其显示在一个子图中。并尝试将其更新为动画。但是最大值的子图给出所有的零值。当我打印数组时,它不是零。我认为它不更新y值。我无法弄清楚原因。任何帮助将不胜感激。动画剧情更新

我将把我的代码,它是可执行的:

from pylab import * 
import time 

ion() 
fs = 1e6 
Ts = 1/fs 
SNR=10 
sinfreq=2*pi*1e5 
pack= 512 
t = Ts*arange(0,pack) 
f = fs*(arange(0,pack)-pack/2)/pack 
max_y = zeros (len(t)) 
y=sin(sinfreq*t)   
y=y+randn(size(y))/sqrt(10^(SNR/10)*2) 
subplot(211)  
line1, = plot(y) 

subplot(212) 
line2, = plot(max_y) 
for i1 in arange(1,1000): 
    y=sin(sinfreq*t) 
    y=y+randn(size(y))/sqrt(10^(SNR/10)*2) 

    line1.set_ydata(y) 

    mk=0 
    for mk in range(0,len(y)): 
     if y[mk] > max_y[mk]: 
      max_y[mk] = y[mk] 
    print max_y 
    line2.set_ydata(max_y) 
    draw()       
    waitforbuttonpress(timeout=0.5) 

好的,我偶然发现了解决方案,我不知道原因,但我先更新max_y图的任何其他值,然后进行实际更新,然后该图显示我的更改。除此之外,它没有显示。我尝试使用不同的for循环来绘制一个更新,但对于我的循环它想更新两次。

我也添加set_ylim来看看更好的限制。我把星星放在我改变的地方。我也把新的代码。我希望它能帮助那些有同样问题的人。

from pylab import * 
import time 

ion() 
fs = 1e6 
Ts = 1/fs 
SNR=10 
sinfreq=2*pi*1e5 
pack= 512 
t = Ts*arange(0,pack) 
f = fs*(arange(0,pack)-pack/2)/pack 
max_y = zeros (len(t)) 
y=sin(sinfreq*t)   
y=y+randn(size(y))/sqrt(10^(SNR/10)*2) 
subplot(211)  
line1, = plot(y) 

sub2=subplot(212) #**** 
line2, = plot(max_y) 
for i1 in arange(1,1000): 
    y=sin(sinfreq*t) 
    y=y+randn(size(y))/sqrt(10^(SNR/10)*2) 

    line1.set_ydata(y) 

    mk=0 
    for mk in range(0,len(y)): 
     if y[mk] > max_y[mk]: 
      max_y[mk] = y[mk] 
    #print max_y 
    line2.set_ydata(zeros(len(max_y)))#****  
    line2.set_ydata(max_y) 
    sub2.set_ylim(min(max_y),max(max_y)) #**** 
    draw()       
    waitforbuttonpress(timeout=0.5) 

你忘了在第二个for循环的缩进。 这实际上应该给你一个IndentationError,所以我不明白你怎么可以说程序是可执行的(实际上,我编辑了你的条目以删除剩余的“在此输入代码”语句;如果你已经检查并且复制粘贴你的条目,你可能会发现两个错误)。

但是,你肯定不希望只是

max_y[:] = max(y) 

的而不是for循环?

+0

好的,对于缩进的抱歉错误。我看到了另一件事,但只要这是我的第一个问题,我就没有看到编辑部分。现在我改变了,并且纠正了。我说它是可执行的,因为我在放入这里之前执行它。对不起,我一定做了一些事情,并改变缩进。但是你所说的代码与我的做法不一样。现在你所做的所有最大值都是相同的,但我正在进行样本比较,并为每个地方找到最大值。你确定他们是一样的吗? – sema 2012-08-12 21:02:52

+0

但我的问题仍然是一样的。乳清第二副图未更新? – sema 2012-08-12 21:26:14

+0

就我所知,子图*正在被更新。然而,情节几乎总是相同的(我可以看到它由于微小的变化而更新,可能是由于分辨率和舍入)。看看你正在打印的max_y值(更好的是,看看前5或10,避免填满你的终端)。 这就是为什么我问你是否想要循环;尝试用'max_y [:] = max(y)语句'替换循环并查看它是否更改。注意:在这种情况下,您需要调整第二个绘图上的刻度或将max_y除以100;否则它绘制在图的外面。 – Evert 2012-08-13 10:24:21