python - lmfit 适合具有多个峰值的数据中的“错误”峰值
问题描述
使用此代码(在我刚刚读入数据的片段之前,它工作正常,在片段之后我只是做标签等)
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
当然,也必须适应这些值。那么适合应该很好地工作。
推荐阅读
- r - 使用 ggplot2 为组自定义颜色
- java - 导航按钮在java netbeans中不起作用
- javascript - 使用令牌在后端和前端识别用户进行身份验证
- cython - 仅使用一个静态方法初始化类(无构造函数)
- swift - CreateML 保存 .mlmodel 失败
- c++ - 对于以下用途,向量和双端队列之间最有效的是什么?
- wordpress - 使用 ACF 在 Wordpress 中显示即将到来的生日 - 在查询日期选择器自定义字段时排除 YEAR
- avro - 找不到类 io.confluent.connect.avro.ConnectDefault
- javascript - 打字稿可以声明语言功能吗?例如; `!variable` 作为`无变量`
- java - 用空字符串替换 Java 括号