我有一个带有两个数据集的图,它会产生一个轻微的梯度,其中一条最佳拟合曲线可能会被过度绘制。
目前,我只设法得到一条直线的最佳适合。我理解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()
应该指出的是,可能没有曲线,但我想知道是否有一个适合。
1条答案
按热度按时间q3aa05251#
如果我理解得不错的话,你的问题与其说是一个实际问题,不如说是一个概念问题。
如果你想显示一条线,在某种程度上代表你的数据集,你可以从三件事开始:移动平均、插值和多项式拟合。
移动平均值可以很好地平滑数据集。我不知道它的内置函数,但你可以自己编写代码,就像here讨论的那样。
插值(例如样条)拟合数据集上的某些函数,这些函数可以在多个点上进行计算,然后进行绘制。
有了上面提到的两个方法,你不必指定一个函数。但是,您可以自己执行fit a polynomial功能。如何确定多项式的次数?你可以把所有数据点的日志,拟合一条线性线到日志数据,如果它拟合得很好,线性部分的系数可以被认为是多项式对原始数据集的次数。但是,不要使用太大次数的多项式-使用这种方法很容易遇到overfitting。