首页 > 解决方案 > 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()

变量“频率”包含从 5 - 315 HZ 的第三频带倍频程频带频谱的频率。“频谱”包含相关的噪声压力级别。现在我想在那个光谱中找到峰值。我需要的值是峰值所在的频率。

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

希望您能够帮助我。

谢谢您的支持。

标签: pythonmatplotlibscipy

解决方案


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

要绘制曲线,您需要Frequency在 x 轴和Spectrumy 轴上绘制 using。您可以通过将它们用作两个数组中的索引来可视化峰值:

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()

示例图


推荐阅读