我有一个带有两个数据集的图,它产生一个轻微的渐变,其中曲线的最佳拟合可能会过度绘制。
目前我只是设法得到最合适的直线。我理解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()
应该注意的是,可能没有曲线,但我想发现是否有适合的曲线。
答案 0 :(得分:7)
如果我理解得很好,那么你的问题更像是一个概念而不是一个实际问题。
如果你想显示一个有点代表你的数据集的线,你可以从三件事开始:移动平均,插值和多项式拟合。
移动平均值可以很好地平滑您的数据集。我不知道它的内置函数,但您可以自己编写代码,正如我们所讨论的here。
插值(例如spline)适合您数据集的某些功能,可以在许多点进行评估,然后进行绘图。
使用上述两种方法,您不必指定函数。但是,您可以自己fit a polynomial运行。如何确定多项式的次数?您可以记录所有数据点,将线性线拟合到日志数据,并且如果IT FIT WELL,则可以将线性部分的系数视为原始数据集的多项式的次数。但是,不要使用太大程度的多项式 - 使用此方法可以很容易地遇到overfitting。