Trace_histo.py 1.97 KB
Newer Older
Philippe Després's avatar
Philippe Després committed
1
#!/usr/bin/env python
Philippe Després's avatar
Philippe Després committed
2 3 4 5 6 7
# programme qui prend un fichier LVM
# en argument et qui en fait un histogramme
# (une seule colonne de mesures)

import matplotlib.pyplot as plt #matplotlib
import numpy as np #numpy
Philippe Després's avatar
Philippe Després committed
8
from sys import argv #système et fichiers
Philippe Després's avatar
Philippe Després committed
9 10 11
from scipy.stats import norm #pour distribution normale

#vérification si l'usager a passé un argument au programme
Philippe Després's avatar
Philippe Després committed
12 13 14 15 16 17
if(len(argv)!=2):
    print("Usage: "+argv[0]+" [fichier]")
    exit()
    
file_in=argv[1] #nom du fichier à traiter
x=[] #liste vide
Philippe Després's avatar
Philippe Després committed
18 19

#ouverture du fichier passé en argument (structure LVM)
Philippe Després's avatar
Philippe Després committed
20
with open(file_in,'r') as f:
Philippe Després's avatar
Philippe Després committed
21 22 23 24 25 26 27
    for line in f:       
        val=line.strip().split() #enlève les espaces avant/après et tokenize
        if not val: #saute lignes vide
            continue
        if(val[0]=="Y_Unit_Label"):
            xtitle=val[1] #récupère les unités
        if(val[0]=="X_Value"): #on commence à lire les valeurs
Philippe Després's avatar
Philippe Després committed
28
           
Philippe Després's avatar
Philippe Després committed
29
            for line_tmp in f:
30
                x.append(float(line_tmp.replace(",",".").strip())) #liste de valeur
Philippe Després's avatar
Philippe Després committed
31
               
Philippe Després's avatar
Philippe Després committed
32 33 34 35
f.close() #fermeture fichier

#création array numpy
volts=np.array(x)
Philippe Després's avatar
Philippe Després committed
36 37 38 39 40 41 42 43 44 45
print(str(len(x))+" mesures lues")

# deux graphiques côte à côte
f = plt.figure(figsize=(10,4))
fig1 = f.add_subplot(121)
fig2 = f.add_subplot(122)#time series
xtime=np.linspace(1,len(x),len(x))
fig1.plot(xtime,volts)
fig1.set_ylabel(xtitle)
fig1.set_xlabel("no. mesure")
Philippe Després's avatar
Philippe Després committed
46 47 48 49 50 51 52 53 54

#fit distribution normale
mu,std=norm.fit(volts)
# axes des x pour fit
xlin = np.linspace(volts.min(),volts.max(), 100)
#courbe distribution normale
p = norm.pdf(xlin, mu, std)
    
#histogram
Philippe Després's avatar
Philippe Després committed
55
n, bins, patches = fig2.hist(volts, 20, range=[volts.min(),volts.max()], density=1, facecolor='green', alpha=0.75)
Philippe Després's avatar
Philippe Després committed
56
#graph distribution normale
Philippe Després's avatar
Philippe Després committed
57 58 59 60 61 62
fig2.plot(xlin, p, 'k', linewidth=2, label=r"$\mu$: "+str("{:.2f}".format(mu))+r" $\sigma$: "+str("{:.2f}".format(std)))
fig2.set_xlabel(xtitle)
fig2.set_ylabel('Fréquence')
fig2.set_title(str(len(x))+" mesures")
fig2.legend()
fig2.grid(True)
Philippe Després's avatar
Philippe Després committed
63

Philippe Després's avatar
Philippe Després committed
64
#plt.tight_layout()
Philippe Després's avatar
Philippe Després committed
65 66
plt.show()        

Philippe Després's avatar
Philippe Després committed
67 68 69