我有一个包含两个数据集的图,它会产生轻微的梯度,其中最适合 的 曲线可能被过度绘制。
目前我只能设法得到一条最适合的直线。我知道 scipy.optimize.curve_fit
应该能够帮助我,但这需要我知道我想要overplot的函数(我认为)。
下面是我的代码和情节。如何为这些数据集创建曲线图?
plt.figure(figsize=(15,6.6))
pl.subplot(1,2,1)
plt.plot(gg,AA, 'kx')
plt.xlabel('x')
plt.ylabel('y')
plt.gca().invert_yaxis()
y=AA
x=gg
fit=pl.polyfit(x,y,1)
#slope, fit_fn=pl.poly1d(fit)
fit_fn=pl.poly1d(fit)
scat=pl.plot(x,y, 'kx', x,fit_fn(x), '-b' )
pl.subplot(1,2,2)
pl.plot(LL,pp, 'kx')#shows points with no removal or bestfit
plt.gca().invert_yaxis()
plt.savefig('1.jpg')
plt.show()
应该指出的是,可能没有曲线,但我想发现是否有适合的曲线。
最佳答案
如果我理解得很好,那么您的问题与其说是实际问题,不如说是概念性问题。
如果您想显示在某种程度上代表您的数据集的线,您可以从三件事开始:移动平均、插值和多项式拟合。
移动平均可以很好地平滑您的数据集。我不知道它有一个内置函数,但你可以自己编写代码,正如 here 所讨论的那样。
插值(例如 spline )在您的数据集上拟合一些函数,可以在许多点评估然后绘制。
使用上述两种方法,您不必指定函数。但是,您可以自己使用 fit a polynomial 函数。如何确定多项式的次数?您可以获取所有数据点的对数,将线性线拟合到对数数据中,如果它拟合得很好,则可以将线性部分的系数视为多项式对原始数据集的次数。但是,不要使用太大的多项式 - 使用此方法很容易遇到 overfitting。
关于python - 在 Python 中将曲线拟合到数据集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20525793/