我有一个包含两个数据集的图,它会产生轻微的梯度,其中一条最佳拟合曲线 可能被过度绘制。
目前我只设法得到一条最合适的直线。我知道 scipy.optimize.curve_fit
应该能够帮助我,但这需要我知道我想要叠加的函数(我认为)。
下面是我的代码和图表。如何为这些数据集创建曲线图?
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/