7

我已经从大约 300,000 个数据点绘制了一个移动平均值,我需要找到信号峰值的最大 y 值及其相应的 x 值,这将是它的频率。我想让它给我绘图本身的坐标,但如果我能让它至少打印出来,我会很满意。请原谅我的编程技能,因为它们不是最强的。这是我正在处理的代码部分以及它生成的绘图的链接。我没有足够的积分来发布图像。

def movingaverage(interval, window_size):
    window= np.ones(int(window_size))/float(window_size)
    return np.convolve(interval, window, 'same')

x = freq[0:300000]
y = fft
pylab.plot(x,y,"k.")
y_av = movingaverage(y, 30)
pylab.plot(x, y_av,"r")
pylab.xlim(0,10)
pylab.ylim(0,1500)
pylab.xlabel("Frequency")
pylab.ylabel("Moving Average Magnitude")
pylab.grid(True)
pylab.show() 

移动平均线图

4

1 回答 1

9

您应该能够执行以下操作:

max_y = max(y_av)  # Find the maximum y value
max_x = x[y_av.index(max_y)]  # Find the x value corresponding to the maximum y value
print max_x, max_y

编辑

numpy 数组没有索引方法,所以我们应该使用 argmax,正如评论中指出的那样:

max_y = max(y_av)  # Find the maximum y value
max_x = x[y_av.argmax()]  # Find the x value corresponding to the maximum y value
print max_x, max_y

我认为这个 API应该可以让你在图像上绘制文本。你可以这样做:

pylab.text(max_x, max_y, str((max_x, max_y)))
于 2012-08-08T18:59:41.640 回答