Gaußfit über Meshgrid

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Thommy
User
Beiträge: 4
Registriert: Sonntag 23. April 2017, 11:50

Hallo,

ich habe eine dreidimensionale Messung, wobei ich die Intensität über ein x-y-Meshgrid plotte (siehe Beispielbild). Bild
Ich habe also zwei Bereich mit einer hohen Intensität und würde gerne nur für das InGaN die Breite des Peaks mit einer Gaußverteilung fitten. Mein Code soweit lautet:

Code: Alles auswählen

Daten=np.genfromtxt(txtfile,dtype=str)
x_dat=Daten[0:,0]
y_dat=Daten[0:,1]
z_dat=Daten[0:,2]

N_x, N_y = 256, 256
x = np.linspace(x_dat.min(), x_dat.max(), N_x)
y = np.linspace(y_dat.min(), y_dat.max(), N_y)
xx, yy = np.meshgrid(x, y)
z_dat = np.clip(z_dat, 1, z_dat.max())
gridded_data = griddata(x_dat, y_dat, z_dat, xx, yy, interp='linear')
fig, axis = plt.subplots()
a_x = (x_dat.max() - x_dat.min()) / N_x
a_y = (y_dat.max() - y_dat.min()) / N_y
im = axis.imshow(gridded_data, origin='lower', interpolation='none',
                 norm=colors.LogNorm())
ff_x = FuncFormatter(lambda x, pos: '{:.3g}'.format((x * a_x) + x_dat.min()))
ff_y = FuncFormatter(lambda y, pos: '{:.3g}'.format((y * a_y) + y_dat.min()))
axis.xaxis.set_major_formatter(ff_x)
axis.yaxis.set_major_formatter(ff_y)
cb = plt.colorbar(im)
plt.xlabel('q \u2225')
plt.ylabel('q \u22A5')
plt.savefig('RSM.jpg', format='jpg', dpi=1000)
plt.show()
Bisher kann ich die Daten also nur einlesen und mir im Meshgrid anzeigen lassen. Ich müsste aber den Peak vom InGaN mittels eines Gaußfits in x-Richtung fitten.

Vielen Dank,
Thommy
Zuletzt geändert von Anonymous am Sonntag 23. April 2017, 12:42, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Thommy hat geschrieben:Bisher kann ich die Daten also nur einlesen und mir im Meshgrid anzeigen lassen. Ich müsste aber den Peak vom InGaN mittels eines Gaußfits in x-Richtung fitten.
Da Du alle Daten einlesen kannst, kannst Du sie auch als 2d-Plot bei gegebenem z darstellen und den gewünschten Fit vornehmen.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Thommy: das ist sicher nicht der Code, mit dem Du das Bild gemacht hast. Warum gibst Du Deinen Daten den dtype str? Da funktioniert kein max oder min. genfromtxt kennt auch das Argument unpack, um gleich in x_dat, y_dat und z_dat aufzuspalten. Ein ›0:‹ ist nichts anders als ›:‹. Da die beiden Peaks sich überlappen, ist es eigentlich nur möglich, beide Peaks gleichzeitig zu fitten. Ansonsten kannst Du auch einen Schnitt bei 0.762 machen, in wie weit dann aber der andere Peak hineinstrahlt kannst Du schlecht abschätzen.
Thommy
User
Beiträge: 4
Registriert: Sonntag 23. April 2017, 11:50

Hallo,

vielen Dank schon mal. Bitte denkt dran, dass das Bild nur ein Beispielbild ist, weil ich keine Möglichkeit hatte, mein Bild hochzuladen.

@kbr: Die Daten der RSM Messung sind leider nicht besonders gut sortiert sondern sehr wirr und daher habe ich sie in das Meshgrid eingetragen. Hier mal die Daten.

Code: Alles auswählen

-0,01194	0,34192	3,00000
-0,01198	0,34301	1,00000
-0,01202	0,34410	5,00000
-0,01205	0,34519	2,00000
-0,01209	0,34628	2,00000
-0,01213	0,34737	4,00000
-0,01217	0,34846	3,00000
-0,01221	0,34955	2,00000
-0,01224	0,35063	2,00000
-0,01228	0,35172	3,00000
-0,01232	0,35281	9,00000
-0,01236	0,35390	6,00000
-0,01240	0,35499	19,00000
-0,01243	0,35607	14,00000
-0,01247	0,35716	14,00000
-0,01251	0,35825	23,00000
-0,01255	0,35933	21,00000
-0,01259	0,36042	22,00000
-0,01262	0,36151	27,00000
-0,01266	0,36259	25,00000
-0,01270	0,36368	26,00000
-0,01274	0,36476	22,00000
-0,01278	0,36585	17,00000
-0,01281	0,36693	17,00000
-0,01285	0,36802	10,00000
-0,01289	0,36910	7,00000
-0,01293	0,37018	5,00000
-0,01296	0,37127	3,00000
-0,01300	0,37235	0,00000
-0,01304	0,37343	3,00000
-0,01308	0,37452	0,00000
-0,01312	0,37560	3,00000
-0,01315	0,37668	2,00000
-0,01319	0,37776	4,00000
-0,01323	0,37884	2,00000
-0,01327	0,37993	3,00000
-0,01331	0,38101	2,00000
-0,01334	0,38209	0,00000
-0,01338	0,38317	1,00000
-0,01342	0,38425	2,00000
-0,01346	0,38533	2,00000
-0,01349	0,38641	2,00000
-0,01353	0,38749	2,00000
-0,01357	0,38857	4,00000
-0,01361	0,38964	4,00000
-0,01364	0,39072	3,00000
-0,01368	0,39180	1,00000
-0,01372	0,39288	2,00000
-0,01376	0,39396	4,00000
-0,01379	0,39503	0,00000
-0,01383	0,39611	3,00000
-0,01387	0,39719	5,00000
-0,01391	0,39826	5,00000
-0,01395	0,39934	7,00000
-0,01398	0,40041	3,00000
-0,01402	0,40149	9,00000
-0,01406	0,40256	12,00000
-0,01410	0,40364	7,00000
-0,01413	0,40471	9,00000
-0,01417	0,40579	15,00000
-0,01421	0,40686	17,00000
-0,01425	0,40793	11,00000
-0,01428	0,40901	13,00000
-0,01432	0,41008	10,00000
-0,01436	0,41115	8,00000
-0,01440	0,41222	14,00000
-0,01443	0,41330	14,00000
-0,01447	0,41437	9,00000
-0,01451	0,41544	8,00000
-0,01164	0,34193	4,00000
-0,01168	0,34302	3,00000
-0,01172	0,34411	3,00000
-0,01175	0,34520	4,00000
-0,01179	0,34629	3,00000
-0,01183	0,34738	3,00000
-0,01186	0,34847	4,00000
-0,01190	0,34956	7,00000
-0,01194	0,35065	5,00000
-0,01198	0,35173	8,00000
-0,01201	0,35282	10,00000
-0,01205	0,35391	9,00000
-0,01209	0,35500	11,00000
-0,01212	0,35608	10,00000
-0,01216	0,35717	11,00000
-0,01220	0,35826	24,00000
-0,01223	0,35935	21,00000
-0,01227	0,36043	24,00000
-0,01231	0,36152	30,00000
-0,01235	0,36260	24,00000
-0,01238	0,36369	29,00000
-0,01242	0,36477	15,00000
-0,01246	0,36586	14,00000
-0,01249	0,36694	17,00000
-0,01253	0,36803	3,00000
-0,01257	0,36911	6,00000
-0,01260	0,37020	14,00000
-0,01264	0,37128	4,00000
-0,01268	0,37236	4,00000
-0,01271	0,37345	2,00000
-0,01275	0,37453	1,00000
-0,01279	0,37561	5,00000
-0,01283	0,37669	1,00000
-0,01286	0,37777	1,00000
-0,01290	0,37886	3,00000
-0,01294	0,37994	1,00000
-0,01297	0,38102	3,00000
-0,01301	0,38210	2,00000
-0,01305	0,38318	2,00000
-0,01308	0,38426	2,00000
-0,01312	0,38534	3,00000
-0,01316	0,38642	2,00000
-0,01319	0,38750	2,00000
-0,01323	0,38858	2,00000
-0,01327	0,38966	1,00000
-0,01330	0,39073	1,00000
-0,01334	0,39181	1,00000
-0,01338	0,39289	3,00000
-0,01341	0,39397	1,00000
-0,01345	0,39504	4,00000
-0,01349	0,39612	3,00000
-0,01352	0,39720	4,00000
-0,01356	0,39827	4,00000
-0,01360	0,39935	5,00000
-0,01363	0,40043	5,00000
-0,01367	0,40150	6,00000
-0,01371	0,40258	7,00000
-0,01374	0,40365	7,00000
-0,01378	0,40472	13,00000
-0,01382	0,40580	8,00000
-0,01385	0,40687	8,00000
-0,01389	0,40795	7,00000
-0,01393	0,40902	10,00000
-0,01396	0,41009	6,00000
-0,01400	0,41116	15,00000
-0,01404	0,41224	14,00000
-0,01407	0,41331	8,00000
-0,01411	0,41438	6,00000
-0,01414	0,41545	5,00000
-0,01134	0,34194	4,00000
-0,01138	0,34303	4,00000
-0,01142	0,34412	7,00000
-0,01145	0,34521	3,00000
-0,01149	0,34630	0,00000
-0,01152	0,34739	2,00000
-0,01156	0,34848	7,00000
-0,01160	0,34957	3,00000
-0,01163	0,35066	6,00000
-0,01167	0,35174	6,00000
-0,01170	0,35283	7,00000
-0,01174	0,35392	8,00000
-0,01178	0,35501	16,00000
-0,01181	0,35610	9,00000
-0,01185	0,35718	23,00000
-0,01189	0,35827	24,00000
-0,01192	0,35936	22,00000
-0,01196	0,36044	21,00000
-0,01199	0,36153	21,00000
-0,01203	0,36261	26,00000
-0,01207	0,36370	20,00000
-0,01210	0,36478	19,00000
-0,01214	0,36587	7,00000
-0,01217	0,36695	12,00000
-0,01221	0,36804	10,00000
-0,01225	0,36912	6,00000
-0,01228	0,37021	6,00000
-0,01232	0,37129	1,00000
-0,01235	0,37237	5,00000
-0,01239	0,37346	1,00000
-0,01242	0,37454	3,00000
-0,01246	0,37562	4,00000
-0,01250	0,37670	1,00000
-0,01253	0,37779	4,00000
-0,01257	0,37887	1,00000
-0,01260	0,37995	1,00000
-0,01264	0,38103	1,00000
-0,01268	0,38211	2,00000
-0,01271	0,38319	5,00000
-0,01275	0,38427	2,00000
-0,01278	0,38535	3,00000
-0,01282	0,38643	2,00000
-0,01286	0,38751	3,00000
-0,01289	0,38859	1,00000
-0,01293	0,38967	3,00000
-0,01296	0,39075	3,00000
-0,01300	0,39182	1,00000
-0,01303	0,39290	5,00000
-0,01307	0,39398	3,00000
-0,01311	0,39506	4,00000
-0,01314	0,39613	3,00000
-0,01318	0,39721	6,00000
-0,01321	0,39829	6,00000
-0,01325	0,39936	5,00000

@Sirius3: Sorry du hast recht. Da fehlte ein Teil. Hier der gesamte Code:

Code: Alles auswählen

Daten=np.genfromtxt(txtfile,dtype=str)
def func(x):
    return float(x.replace(',','.'))

func_vec=np.vectorize(func)
Daten=func_vec(Daten)

with open ('Versuch.txt','wb') as f:
    np.savetxt(f,Daten,fmt='%7.6g', delimiter='\t')

x_dat=Daten[0:,0]
y_dat=Daten[0:,1]
z_dat=Daten[0:,2]

N_x, N_y = 256, 256
x = np.linspace(x_dat.min(), x_dat.max(), N_x)
y = np.linspace(y_dat.min(), y_dat.max(), N_y)
xx, yy = np.meshgrid(x, y)
z_dat = np.clip(z_dat, 1, z_dat.max())
gridded_data = griddata(x_dat, y_dat, z_dat, xx, yy, interp='linear')
fig, axis = plt.subplots()
a_x = (x_dat.max() - x_dat.min()) / N_x
a_y = (y_dat.max() - y_dat.min()) / N_y
im = axis.imshow(gridded_data, origin='lower', interpolation='none',
                 norm=colors.LogNorm())
ff_x = FuncFormatter(lambda x, pos: '{:.3g}'.format((x * a_x) + x_dat.min()))
ff_y = FuncFormatter(lambda y, pos: '{:.3g}'.format((y * a_y) + y_dat.min()))
axis.xaxis.set_major_formatter(ff_x)
axis.yaxis.set_major_formatter(ff_y)
cb = plt.colorbar(im)
plt.xlabel('q \u2225')
plt.ylabel('q \u22A5')
plt.savefig('RSM.jpg', format='jpg', dpi=1000)
plt.show()
Zuletzt geändert von Anonymous am Sonntag 23. April 2017, 17:47, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Antworten