Matplotlib 绘图基于索引而不是值

Matplotlib plots based on index not value

我正在尝试创建一个绘制函数峰值的函数。当我不给绘图一个范围(即从 0 到 99 的 100 个时间步长)时它起作用,但当我给出一个范围(即从 -2pi 到 4pi 的 100 个时间步长)时它不起作用。有想法该怎么解决这个吗?谢谢!

def findpeaks(f,x,basicplot=True,plotit=False):

    dx = x[1] - x[0]
    
    gradfunc = np.gradient(f,dx)
    signgrad = np.sign(gradfunc)
    gradsign = np.gradient(signgrad,dx)
    peaks = np.where(-gradsign > 0)[0][::2] 
    peaksnew = peaks + x[0]
    
    if basicplot:
        plt.plot(x,f,'b')
        plt.plot(peaks,f[peaks],'ok')
    
    if plotit:
        plt.plot(x,f,'b')
        plt.plot(x,gradfunc,'y')
        plt.plot(x,signgrad,'g')
        plt.plot(x,-gradsign,'r')
        plt.plot(peaks,f[peaks],'ok')
        
    return peaks
x = np.linspace(-2*np.pi,4*np.pi,100)
f = 0.5*x + 2*np.sin(x)

看起来您只需要为黑点线性重新缩放 x-axis: 0 -> -2 圆周率和 99 -> 4 圆周率 给出 a = 6pi/100 和 b =-2pi。所以写

plt.plot(a*peaks+b,f[peaks],'ok')

使用这些值应该可以解决这个问题。