将 x 轴值添加到图中的峰值

Adding the x-axis values to the peaks in the graph

亲爱的 Whosebug 大家庭,

我一直在尝试将 x 轴值放在图中检测到的峰值旁边或顶部。基本上,首先我使用该函数来查找频谱中的峰值。然后,我想使用这些与峰值重合的 x 轴值,而不仅仅是放“x”或任何类型的符号。

感谢您提供任何帮助或建议。

代码;

    peaks, properties = find_peaks(meanMat1, prominence=1, width=4)
    peak_coordinates = list(zip(Ram[peaks], a[peaks])) 
    
    print(peak_coordinates)
   
    d=Ram[peaks]
    e=c[peaks]
    
    ax.plot(d, e, "x", color = "xkcd:orange")

(这里,d和e是检测到的峰。d和e分别给出x轴和y轴值(在np.array中)。)

您可以使用 Matplotlib text 添加一个字符串,或者在您的特定情况下将 x-axis 值添加到位置 x 的轴(在您的示例中为 d), y(在您的示例中为e)在数据坐标中。

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

# curve setup
x = np.linspace(0,10*np.pi,200)
fx = np.sin(2*x)*np.cos(x/2)*np.exp(-0.1*x)

peaks, _ = find_peaks(fx, prominence=0.4)
peak_coordinates = list(zip(peaks, fx[peaks]))

fig, ax = plt.subplots()
ax.plot(fx)
ax.plot(peaks, fx[peaks], "x")

y0,y1=ax.get_ylim()
ax.set_ylim(y0,y1*1.1) # fix top y-limit

for xp,yp in peak_coordinates:
    plt.text(xp*1.05, yp*1.05, xp, fontsize=10)

plt.show()