如何使用Python为CSV文件中的数据拟合高斯分布
使用lmfit实现CSV数据高斯拟合操作步骤
首先提前安装所需依赖:pip install pandas numpy lmfit matplotlib
1. 导入依赖库
import pandas as pd import numpy as np from lmfit.models import GaussianModel import matplotlib.pyplot as plt
2. 读取CSV数据
默认你的CSV文件包含两列:自变量x(如波长、时间)、因变量y(如信号强度、计数),替换对应列名和文件路径即可:
# 替换为你的CSV文件实际路径 df = pd.read_csv("your_data.csv") # 替换为你CSV里对应的列名 x = df["x_column"].values y = df["y_column"].values
可选预处理:如果数据包含无关区间,可以先截取包含高斯峰的部分数据再做拟合,提升拟合准确率。
3. 初始化高斯模型
lmfit内置的GaussianModel已经封装了标准高斯函数:y = A * exp(-(x-μ)²/(2σ²)),其中A为峰值幅度,μ为峰值中心,σ为分布标准差。
gmodel = GaussianModel()
4. 设置拟合初始参数
新手可以先用内置的参数自动估算方法,自动生成初始值:
params = gmodel.guess(y, x=x)
如果自动拟合效果不佳,可手动指定初始值和取值范围,示例如下:
# 手动设置峰值中心初始值为10,允许浮动范围8~12 params['center'].set(value=10, min=8, max=12) # 手动设置标准差初始值为0.8,最小值不低于0.2 params['sigma'].set(value=0.8, min=0.2) # 手动设置峰值幅度初始值为20 params['amplitude'].set(value=20)
5. 执行拟合计算
result = gmodel.fit(y, params, x=x)
6. 查看拟合结果
打印拟合报告
报告包含各个参数的拟合值、误差、拟合优度R²等核心指标:
print(result.fit_report())
可视化拟合效果
直观对比原始数据和拟合曲线的匹配度:
# 绘制原始散点数据 plt.scatter(x, y, label="原始数据", s=12, color="lightgray") # 绘制拟合曲线 plt.plot(x, result.best_fit, label="高斯拟合曲线", color="crimson", linewidth=2) plt.xlabel("x") plt.ylabel("y") plt.legend() plt.show()
多峰拟合拓展
如果需要同时拟合多个高斯峰,可叠加多个高斯模型实例,通过prefix参数区分不同峰的参数即可:
# 定义两个高斯峰的拟合模型 gmodel = GaussianModel(prefix="peak1_") + GaussianModel(prefix="peak2_") # 后续分别给peak1_center、peak2_center等参数设置初始值再拟合即可
内容的提问来源于stack exchange,提问作者Angela Mary
相关产品推荐
相关产品推荐

