###############################################
######  Réalisation d'un graphique      #######
##### partir de mesures expérimentales ########
################# J.B 01/23 ###################
################# Python 3.4  #################
###############################################

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import linregress
import matplotlib
matplotlib.rc('xtick', labelsize=14)
matplotlib.rc('ytick', labelsize=14)
font = {'family' : 'arial',
        'weight' : 'normal',
        'size'   : 14}
matplotlib.rc('font', **font)


plt.close("all") # pour fermer les fenêtres graphiques


## Récupération du fichiers de points

# Mettre le fichier de données dans le même dossier

def recup(nomfichier, colonnes, sep = ";"):
    """
    nomfichier : fichier texte .txt ou .csv
    colonnes : type int, nbre de colonnes à récupérer
    sep : type str, séparateur de colonnes, ";" par défaut
    RETOUR : type array, tableau de données.
    """
    L = [ [] for _ in range(colonnes)] #initialisaition de la liste de données
    with open(nomfichier, "r") as contenu:
        for ligne in contenu:
            try : #pour éviter les entêtes
                ligne = ligne.replace(',','.') #  transforme les , en .
                ligne = ligne.split(sep) #sépare les valeurs
                for i in range(colonnes):
                    L[i].append(float(ligne[i]) )#remplissage et conversion en flottant
            except: ValueError
    return np.array(L) # conversion en tableau



##Points expérimentaux factices
nomfichier ='TP.csv'
Donnees = recup(nomfichier, 3, sep = ";")

N =  Donnees[0]
liste_x =  Donnees[1] #abscisses : L en cm
liste_y = Donnees[2] #ordonnées : B en mT

## Valeur de l'incertitudes de mesures : +/-0.2 en x, +/- 0.4 en y
e_x = [0.01 for k in range(len(liste_x))] # erreur sur L
e_y = [0.02 for k in range(len(liste_x))] # erreur sur B


## modèle :
B0 = 1.23 # mT à calculer (µ0nI)
B_th = [B0 for _ in liste_x]


## représentation graphique
plt.figure(figsize=(10,8))
plt.grid()
plt.errorbar(liste_x,liste_y,xerr=e_x,yerr=e_y,label="expérience",capsize = 5,fmt="go",linewidth=2)
plt.plot(liste_x,B_th,label="modèle",linewidth=3)
plt.legend(loc="best")

plt.xlabel(" X (unite)")  #A MODIFIER
plt.ylabel(" Y (unite)")  #A MODIFIER
plt.title(" Mon Titre ")  #A MODIFIER
plt.show()
