有没有办法绘制没有函数的最佳拟合曲线? Python
Is there a way to plot a curve of best fit without function? Python
我需要绘制一条最佳拟合的平滑曲线,但我发现的所有方法都使用 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中有多种样条例程可供选择。
我需要绘制一条最佳拟合的平滑曲线,但我发现的所有方法都使用 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中有多种样条例程可供选择。