使用样条插值绘制图形中最大值的 x 和 y 值的线

Plot lines to x and y values of maximum in graph with spline interpolation

我想绘制一个图形并通过绘制一条返回 x 轴和 y 轴的虚线并显示两者的值来突出显示其局部最大值。

例如一些数据:

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import make_interp_spline

x_ = np.array([1, 2.5, 2.7, 8, 3])
y_ = np.array([1, 2, 3, 4, 5, 6])
spline = make_interp_spline(x_, y_)
x = np.linspace(x_.min(), x_.max(), 500)
y = spline(x)

xmax = x[np.argmax(y)]
ymax = y.max()
plt.plot(x, y)
plt.plot(xmax,ymax,'o')
plt.show()

我该怎么做?

提前致谢

大体代码还可以,但是有两个大错误:

1- x 应该排序

2- xy 应该大小相同

代码的工作版本:

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import make_interp_spline

x_ = np.array([1, 2.5, 2.7, 3, 8])
y_ = np.array([1, 2, 3, 5, 4])
spline = make_interp_spline(sorted(x_), y_)
x = np.linspace(x_.min(), x_.max(), 500)
y = spline(x)

xmax = x[np.argmax(y)]
ymax = y.max()
plt.plot(x_, y_, 'o')
plt.plot(x, y)
plt.plot(xmax,ymax,'s')

# annotations
plt.axhline(ymax, ls=':', c='k')
plt.axvline(xmax, ls=':', c='k')
plt.text(xmax, ymax*0.95, f'({round(xmax,2)}, {round(ymax,2)})')

plt.show()