我有一个带有两个数据集的图,它会产生一个轻微的梯度,其中一条最适合的曲线可能会被重叠。
目前我只找到了一条最合适的直线。我知道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。
相关问题 更多 >
编程相关推荐