微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python找到峰值 - 错误的x轴

如何解决Python找到峰值 - 错误的x轴

我得到以下代码

Frequency = df['x [Hz]']
Spectrum = df['test_spec']

x = Spectrum
peaks,_ = find_peaks(x,distance=20)
plt.plot(peaks,x[peaks],"xr"); plt.plot(x); plt.legend(['distance'])
plt.show()

变量“Frequency”包含从 5 - 315 HZ 的第三个频段倍频程频谱的频率。 “频谱”包含相关的噪声压力水平。现在我想在该光谱中找到峰值。我需要的值是频率,峰值所在的位置。

问题是该图显示一个 x 轴,步长为 0、5、10、15,但我想要一个 x 轴刻度,其中我的频率保存在变量“频率”中。

希望你能帮助我。

感谢您的支持

解决方法

find_peaks() 的文档可能有点混乱,因为它称其输入为 x,而在大多数情况下,输入将绘制在 y 轴上。 find_peaks() 不关心 x 轴,假设它与数组索引 (0,1,2,...) 相同。

要绘制曲线,您需要使用 x 轴上的 Frequency 和 y 轴上的 Spectrum 进行绘图。您可以将峰值用作两个数组中的索引:

import matplotlib.pyplot as plt
from scipy.signal import find_peaks
import numpy as np

Frequency = np.linspace(5,315,200)
Spectrum = np.random.randn(200).cumsum()
Spectrum += 1 - Spectrum.min()

peaks,_ = find_peaks(Spectrum,distance=20)
plt.plot(Frequency[peaks],Spectrum[peaks],"xr")
plt.plot(Frequency,Spectrum)
plt.legend(['distance'])
plt.tight_layout()
plt.show()

example plot

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。