lmfit 适合 'wrong' 具有多个峰值的数据中的峰值

lmfit fits 'wrong' peak in data with multiple peaks

使用这段代码(在我刚刚读入数据的片段之前,它工作正常,在片段之后我只是做标签等)

plt.errorbar(xdata, ydata, yerr, fmt='.', label='Data')

model = models.GaussianModel()
params = model.make_params()

params['center'].set(6.5)
#params['center'].vary = False

fit = model.fit(ydata, params=params, x=xdata, weights=1/yerr)
print(fit.fit_report())

plt.plot(xdata, fit.best_fit, label='Fit')

我尝试拟合最后一个峰(大约在 x=6.5 处)。但正如您在图片中看到的那样,代码并没有这样做。谁能告诉我这是为什么?

编辑: 如果我 运行 行 params['center'].vary = False 则“拟合”到处都变成零。

我从未使用过 lmfit,但问题很可能是您试图适应整个数据区域。考虑到您传递给 .fit 调用的整个数据区域,结果拟合可能是最佳和正确的。
您应该尝试只将相关数据传递给合适的。在您的情况下,xdata 应该只是从 5.5 到 7.5(或这些数字附近的某处)的数据点集。 ydata 当然也必须适应这些值。那么合身应该会很好。