我有一个资料框,其中 x (第 x 列)和 y (第 1 列)值低于我得到mean
and stdev
。
接下来我将它们一起绘制在一张图表上,但它看起来非常错误,不仅仅是拟合曲线移动了,我不确定它有什么问题。
import matplotlib.pyplot as plt
from scipy import stats
from scipy import optimize
import numpy as np
data_sample = {'x': [0,1,2,3,4,5,6,7,8,9,10], '1': [0,1,2,3,4,5,4,3,2,1,0]}
def test_func(x, a, b):
return stats.norm.pdf(x,a,b)
params, cov_params = optimize.curve_fit(test_func, data_sample['x'], data_sample['1'])
print(params)
plt.scatter(data_sample['x'], data_sample['1'], label='Data')
plt.plot(data_sample['x'] , test_func(data_sample['x'], params[0], params[1]), label='Fitted function')
plt.legend(loc='best')
plt.show()
uj5u.com热心网友回复:
需要对资料进行归一化,使曲线下的面积为 1。要计算面积,当所有 x 值相差 1 时,您需要 y 值的总和。如果 x 值之间的空间大于或小于 1,则还应包括该因子。另一种计算面积的方法是
PS:使用原始代码(没有归一化),但使用更详细的 x 值,窄曲线会更明显:
x_detailed = np.linspace(min(data_sample['x']) - 1, max(data_sample['x']) 1, 500)
plt.plot(x_detailed, test_func(x_detailed, params[0], params[1]), color='m', label='Fitted function')
0 评论