动画剧情更新
问题描述:
我正在尝试查找正弦曲线的最大值并将其显示在一个子图中。并尝试将其更新为动画。但是最大值的子图给出所有的零值。当我打印数组时,它不是零。我认为它不更新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循环?
好的,对于缩进的抱歉错误。我看到了另一件事,但只要这是我的第一个问题,我就没有看到编辑部分。现在我改变了,并且纠正了。我说它是可执行的,因为我在放入这里之前执行它。对不起,我一定做了一些事情,并改变缩进。但是你所说的代码与我的做法不一样。现在你所做的所有最大值都是相同的,但我正在进行样本比较,并为每个地方找到最大值。你确定他们是一样的吗? – sema 2012-08-12 21:02:52
但我的问题仍然是一样的。乳清第二副图未更新? – sema 2012-08-12 21:26:14
就我所知,子图*正在被更新。然而,情节几乎总是相同的(我可以看到它由于微小的变化而更新,可能是由于分辨率和舍入)。看看你正在打印的max_y值(更好的是,看看前5或10,避免填满你的终端)。 这就是为什么我问你是否想要循环;尝试用'max_y [:] = max(y)语句'替换循环并查看它是否更改。注意:在这种情况下,您需要调整第二个绘图上的刻度或将max_y除以100;否则它绘制在图的外面。 – Evert 2012-08-13 10:24:21