Самые низкие точки в ваших данных начинаются примерно с y = 4000. Но ваша функция Гаусса не имеет члена смещения, поэтому она всегда будет начинаться с y = 0. Вам нужно либо нормализовать ваши данные, либо добавить смещение следующим образом:
def _2gaussian(x, amp1, cen1, sigma1, amp2, cen2, sigma2, offset):
g1 = amp1 * (1 / (sigma1 * (np.sqrt(2 * np.pi)))) * (np.exp((-1.0 / 2.0) * (((x - cen1) / sigma1) ** 2)))
g2 = amp2 * (1 / (sigma2 * (np.sqrt(2 * np.pi)))) * (np.exp((-1.0 / 2.0) * (((x - cen2) / sigma2) ** 2)))
return g1 + g2 + offset # + cen2
Тогда я настоятельно рекомендую использовать аргумент p0
в curve_fit
, который позволит вам указать начальное предположение для каждого параметра в вашей функции подбора. В вашем случае ваше предположение для offset
будет 4000.