"out.best_fit"으로 최종 적합을 인쇄 할 수 있습니다. 지금 내가하고 싶은 것은 개별 피크가 각각 가우스 커브가 아닌 모든 커브가 단일 커브로 병합됩니다. 글로벌 적합의python-lmfit으로 가우스 커브 피팅 한 후 개별 피크를 그립니다
from pylab import *
from lmfit import minimize, Parameters, report_errors
from lmfit.models import GaussianModel, LinearModel, SkewedGaussianModel
from scipy.interpolate import interp1d
from numpy import *
fit_data = interp1d(x_data, y_data)
mod = LinearModel()
pars = mod.make_params(slope=0.0, intercept=0.0)
pars['slope'].set(vary=False)
pars['intercept'].set(vary=False)
x_peak = [278.35, 334.6, 375]
y_peak = [fit_data(x) for x in x_peak]
i = 0
for x,y in zip(x_peak, y_peak):
sigma = 1.0
A = y*sqrt(2.0*pi)*sigma
prefix = 'g' + str(i) + '_'
peak = GaussianModel(prefix=prefix)
pars.update(peak.make_params(center=x, sigma=1.0, amplitude=A))
pars[prefix+'center'].set(min=x-20.0, max=x+20.0)
pars[prefix+'amplitude'].set(min=0.0)
mod = mod + peak
i += 1
out = mod.fit(y_data, pars, x=x_data)
plt.figure(1)
plt.plot(x_data, y_data)
plt.figure(1)
plt.plot(x_data, out.best_fit, '--')
플롯 : 반환하는 복합 모델입니다
components = out.eval_components(x=x_data)
for model_name, model_value in components.items():
plt.plot(x_data, model_value)
# or more simply, if you prefer:
plt.plot(x_data, components['g0_'])
plt.plot(x_data, components['g1_'])
...
, ModelResult.eval_components()
:
'x_data'와'y_data'는 무엇입니까? – Cleb
죄송합니다. x 및 y 데이터에 대한 목록은 두 개뿐입니다. – TMR
'out'에서 적합 매개 변수를 가져올 수 없습니까? 그들은 적합성의 y 값을 계산하기 위해 어딘가에 저장되어야합니다. 그런 다음 적합 매개 변수를 추출하면 단일 가우스 분포를 그릴 수 있습니다. –