我需要绘制一条最适合的平滑曲线,但是我发现的所有方法都使用scipy.optimize.curve_fit(),这需要了解与x和y有关的函数。对于基本散点图,有没有更简单的方法?
我试图获得什么曲线:
import matplotlib.pyplot as plot
x = range(30)
y = [1, 1, 1, 2, 1, 1, 1, 2, 4, 5, 8, 12, 13, 14, 12, 11, 9, 6, 5, 4, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1 ]
plot.plot(x, y, "o")
plot.show()
任何帮助将不胜感激。
通常使用样条曲线可以平滑而无需猜测生成函数。这是使用您的数据的示例:
import matplotlib.pyplot as plt
from scipy.interpolate import UnivariateSpline
import numpy as np
x = range(30)
y = [1, 1, 1, 2, 1, 1, 1, 2, 4, 5, 8, 12, 13, 14, 12, 11, 9, 6, 5, 4, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1 ]
s = UnivariateSpline(x, y, s=5)
xs = np.linspace(0, 29, 100)
ys = s(xs)
plt.plot(x, y, 'o')
plt.plot(xs, ys)
plt.show()
您可能已经猜到了,该关键字s
用于设置拟合与数据的匹配程度,以及s=0
贯穿每个点的位置。
样条线基本上适合简单函数来拟合曲线中的局部点,然后匹配边界处的导数以连接这些局部曲线,因此最终结果看起来很平滑。
在scipy中有多种样条例程可供选择。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句