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')
使用这些值应该可以解决这个问题。
我正在尝试创建一个绘制函数峰值的函数。当我不给绘图一个范围(即从 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')
使用这些值应该可以解决这个问题。