动画剧情更新

时间:2012-08-10 14:56:36

标签: matplotlib

我试图找到正弦曲线的最大值并在子图中显示它。并尝试像动画一样更新它。但是最大值的子图给出了所有零值。当我打印数组时,它不是零。我认为它不是更新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)

2 个答案:

答案 0 :(得分:0)

你忘记了第二个for循环中的缩进。 这实际上应该给你一个IndentationError,所以我不明白你怎么能说程序是可执行的(事实上,我编辑了你的条目以删除左边的“输入代码在这里”声明;如果你已经检查和复制 - 你的参赛作品,你可能会发现两个错误。)

但是,你确定你不想简单地

max_y[:] = max(y)

而不是for循环?

答案 1 :(得分:0)

好的,我偶然找到了解决方案,我不知道原因,但我先更新我的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)