Matplotlib 动画情节更新

Matplotlib 动画情节更新,matplotlib,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)-p

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

您忘记了第二个for循环中的缩进。 这实际上会给你一个缩进错误,所以我不明白你怎么能说程序是可执行的(事实上,我编辑了你的条目来删除剩下的“entercodehere”语句;如果你检查并复制粘贴了你的条目,你可能会发现这两个错误)

但是,你确定你不只是想要

max_y[:] = 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)

好的,很抱歉出现缩进错误。我看到了另一件事,但我没有看到编辑部分,只要这是我的第一个问题。现在我已经改变了,并且改正了。我说它是可执行的,因为我在放在这里之前执行它。对不起,我一定做了些什么,改变了缩进。但是你说的代码和我的代码不一样。现在所有的最大值都是一样的,但我在做样本比较,找到每个地方的最大值。你确定他们是一样的吗?但我的问题还是一样的。第二个子批次没有更新?据我所知,子批次正在更新。然而,绘图几乎总是一样的(我可以看到它因为微小的变化而被更新,可能是由于分辨率和舍入)。查看您正在打印的最大值(最好只查看前5或10,以避免填充您的终端)。这就是为什么我问你是否想要这个循环;尝试用
max_y[:]=max(y)语句替换循环,并查看它是否更改。注意:在这种情况下,您需要调整第二个绘图上的比例或将最大值除以100;好的,我已经改变了我的代码,正如你在第14行之后所说的那样,
a=subplot(211)line1,=plot(max_y)b=subplot(212)line2,=arange(11000)中i1的plot(y):y=i1*sin(sinfreq*t)y=y+randn(size(y))/sqrt(10^(SNR/10)*2)line1。set_ydata(y)mk=0 max_y[:]=max(y)line2.set_ydata(max_y)draw()waitforbuttonpress(timeout=0.5)a.set_ylim(min(y),max(y))b.set_ylim(min(max_y),max(max_y))
但该行保留为其第一位。绘图仍然没有更新。我不明白为什么。