我有x,y(order
,Hill
)数据,想要平滑地拟合我的数据,但是我的曲线看起来不平滑。我正在使用curve_fit
函数和matplotlib
我的代码如下:
def func(x, a, b, c):
return a*np.exp(-b*x)+c
for i in range(len(hill_numbers)):
Hill = np.array(hill_numbers[i])
print Hill, order
popt, pcov = curve_fit(func, order, Hill, p0=(1, 1e-6, 1), maxfev=10000)
plt.plot(order, Hill, ls="none", marker='.', color='grey')
plt.plot(order, func(order, *popt),'-')
plt.xticks(np.arange(0, 3, step=1))
plt.xlabel('order q')
plt.ylabel('Hill numbers')
plt.show()
我有以下数据
Hill
看起来像这样:
[19. 12.14 7.5426009]
[19. 12.14 7.5426009]
和order
[0,1,2]
[0,1,2]
答案 0 :(得分:0)
您需要定义一个精细的x网格以绘制连续的平滑线,如下所示。例如,使用linspace
作为order_fine = np.linspace(order[0], order[-1], 100)
,然后使用拟合系数order_fine
*popt
传递到绘图函数来完成此操作
import numpy as np
hill_numbers = [[19, 12.14, 7.5426009], [19, 17.14, 15.5426009]]
order = np.array([0,1,2])
def func(x, a, b, c):
return a*np.exp(-b*x)+c
for i in range(len(hill_numbers)):
order_fine = np.linspace(order[0], order[-1], 100)
Hill = np.array(hill_numbers[i])
popt, pcov = curve_fit(func, order, Hill, p0=(1, 1e-6, 1), maxfev=10000)
plt.plot(order, Hill, ls="none", marker='.', color='grey')
plt.plot(order_fine, func(order_fine, *popt),'-')