python 直方图多峰的曲线拟合
时间: 2023-10-14 09:30:09 浏览: 93
可以使用SciPy库中的curve_fit函数进行曲线拟合。以下是一个多峰直方图的例子:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
# 生成多峰直方图数据
x = np.linspace(-10, 10, 1000)
y = np.exp(-(x+2)**2) + np.exp(-(x-2)**2/2) + np.exp(-(x+5)**2/3)
# 绘制直方图
plt.hist(y, bins=50, density=True)
# 定义高斯分布函数
def gaussian(x, a, b, c):
return a * np.exp(-(x - b)**2 / (2 * c**2))
# 定义多峰高斯分布函数
def multi_gaussian(x, *params):
n = len(params)
result = np.zeros_like(x)
for i in range(n//3):
result += gaussian(x, params[3*i], params[3*i+1], params[3*i+2])
return result
# 初始参数猜测值
init_params = [0.8, -2, 1, 0.6, 2, 1.5, 0.4, 5, 2]
# 使用 curve_fit 进行参数拟合
fit_params, _ = curve_fit(multi_gaussian, x, y, p0=init_params)
# 绘制拟合曲线
plt.plot(x, multi_gaussian(x, *fit_params), 'r-', lw=2)
plt.show()
```
在上面的代码中,首先生成了一个多峰直方图的数据,并绘制了直方图。然后定义了一个高斯分布函数和一个多峰高斯分布函数,使用 curve_fit 函数对直方图数据进行拟合,得到了拟合参数 fit_params,最后将拟合曲线绘制出来。
需要注意的是,参数的初始猜测值对拟合结果有很大的影响,如果初始猜测值不够准确,可能会得到一个不理想的拟合结果。因此,可以根据实际情况调整初始猜测值,以得到更好的拟合结果。