You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python绘图中Gaussian拟合问题求助(附代码与数据文件)

嘿,我来帮你搞定Python里的高斯拟合问题~我整理了一套完整的可运行方案,你可以对照自己的代码排查问题:

Python高斯拟合完整实现方案

1. 先导入必备库

我们需要用到数值计算、拟合工具和绘图库,代码如下:

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import pandas as pd

2. 加载你的数据文件

假设你的文本文件是两列(x和y值,用空格/制表符分隔),用下面两种方式都能加载:

方式一:用pandas(更直观)

data = pd.read_csv("PVC_Cs137.txt", sep=r'\s+', header=None)
x_data = data[0].values
y_data = data[1].values

方式二:用numpy(轻量)

x_data, y_data = np.loadtxt("PVC_Cs137.txt", unpack=True)

加载完可以先打印x_data[:5]和y_data[:5]确认数据是否正确读取。

3. 定义高斯函数

标准的高斯函数带基线(背景),公式和对应代码如下:
$$ y = A \cdot e^{-\frac{(x - \mu)2}{2\sigma2}} + B $$
其中:

  • A:高斯峰的高度(峰值减去基线)
  • μ:峰值对应的x位置(均值)
  • σ:标准差(决定峰的宽度)
  • B:基线(背景的最小值)
def gaussian(x, A, mu, sigma, B):
    return A * np.exp(-(x - mu)**2 / (2 * sigma**2)) + B

4. 设置初始参数(这步很关键!)

curve_fit需要你给一个初始参数猜测,如果猜得太离谱,拟合很容易失败。你可以先看一眼原始数据的大致情况来设置:

# 初始参数顺序:[峰值高度, 峰值位置, 峰宽度, 基线]
initial_guess = [np.max(y_data) - np.min(y_data), np.mean(x_data), np.std(x_data), np.min(y_data)]

如果初始猜测不对,你可以手动调整:比如看数据峰值在x=100附近,就把第二个数改成100;峰宽大概是20,就把第三个数改成20。

5. 执行拟合并输出结果

# 运行拟合
params, params_covariance = curve_fit(gaussian, x_data, y_data, p0=initial_guess)

# 提取拟合好的参数
A_fit, mu_fit, sigma_fit, B_fit = params
print("拟合得到的参数:")
print(f"峰值高度 A = {A_fit:.2f}")
print(f"峰值位置 μ = {mu_fit:.2f}")
print(f"峰宽度(标准差)σ = {sigma_fit:.2f}")
print(f"基线背景 B = {B_fit:.2f}")

6. 绘图对比原始数据和拟合曲线

# 生成拟合曲线的x轴数据(更平滑)
x_fit = np.linspace(np.min(x_data), np.max(x_data), 1000)
y_fit = gaussian(x_fit, A_fit, mu_fit, sigma_fit, B_fit)

# 画图展示
plt.figure(figsize=(10, 6))
plt.scatter(x_data, y_data, label='原始数据', color='steelblue', s=12)
plt.plot(x_fit, y_fit, label='拟合高斯曲线', color='#ff4444', linewidth=2)
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.title('PVC_Cs137 数据高斯拟合结果')
plt.legend()
plt.grid(alpha=0.3)
plt.show()

常见问题排查

  • 如果出现RuntimeError,90%是初始参数猜得不对,手动调整initial_guess就行(比如看数据峰值位置,把mu的初始值改成对应x)
  • 如果拟合曲线和数据差很多,检查高斯函数的定义是不是写错了(比如指数部分的分母有没有乘2,有没有加基线)
  • 确认数据加载正确,有没有把x和y列搞反,或者读取时分隔符不对

内容的提问来源于stack exchange,提问作者Zen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:27:55