実験データにガウス近似をプロットしようとしています。私のデータは、x 値と y 値の 2 つの列を含む csv ファイルの形式です。現在、フォルダーに 3 つの csv ファイルがあります。「for」ループを使用してフォルダー内の csv ファイルを読み取り、x 値と y 値を配列に格納しています。次に、配列を出力して、すべてのデータ値が配列に格納されているかどうかを確認します。データ値のガウス近似をプロットしようとしています。得られたガウスフィットのスニペットを添付しました。各csvファイルのフィットをプロットする方法を見つけたいです。現在、スニペットに示されているように、3 つのファイルすべてに対して 1 つの適合しか得られません。私は3つのそのようなフィットを生成したい. 追加の詳細が必要な場合はお知らせください。喜んで提供します。どんな提案も本当に役に立ちます。
以下にコードを添付しました。
import csv
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from scipy.optimize import curve_fit
from scipy import asarray as ar,exp
import lmfit
from glob import glob
import os
from lmfit import Parameters, minimize, report_fit, Model
xData=np.array(xData)
yData=np.array(yData)
mean=sum(xData*yData)/sum(yData)
sigma=np.sqrt(sum(yData*(xData-mean)**2)/sum(yData))
def Gauss(x,I0,x0,sigma,Background):
return I0*exp((-(x-x0)**2)/(2*sigma**2))+Background
mod=Model(Gauss)
import glob
path=r'E:\Users\ConfocalUser\Documents\GitHub\qudi\NV_Points'
#path=r"E:\Users\ConfocalUser\Documents\GitHub\qudi"
files=glob.glob(os.path.join(path,'*.csv')) # add the second closing parenthesis here
xData=[]
yData=[]
for file in files:
print(file)
with open(file,"r") as f_in: ##### open 'file'
reader=csv.reader(f_in)
next(reader) ####NB only use this if CSV has a header line
for line in reader:
try:
float_1,float_2=float(line[0]),float(line[1])
xData.append(float_1)
yData.append(float_2)
except ValueError:
continue
#############################################################
#gives fit and results
#result#gives statistics
print('xData:', xData) # show the results
print('yData:', yData)
###check if the path is correct
Sample output:
E:\Users\ConfocalUser\Documents\GitHub\qudi\NV_Points\0951 x 30.csv
E:\Users\ConfocalUser\Documents\GitHub\qudi\NV_Points\0951 y 30.csv
E:\Users\ConfocalUser\Documents\GitHub\qudi\NV_Points\0951 z 30.csv
xData: [-2.010019542e-06, -1.943019542e-06, -1.876019542e-06, -1.809019542e-06, -1.742019542e-06, etc]
yData: [73313.0, 4769.0, 0.0, 7259.0, 9436.0, 13502.0, 15917.0, 22537.0, 29154.0, 38734.0 etc]
plt.plot(xData,yData,'bo',label='experimental_data')
plt.grid()
plt.show()
result=mod.fit(yData,x=xData,I0=1,x0=mean,sigma=sigma,Background=0)
result.plot()
plt.grid()