import numpy as np
import matplotlib.pyplot as plt


# ValeursX et ValeursY sont deux listes qui correspondent aux
# points expérimentaux (abscisses et ordonnées).
# IncertitudesX et IncertitudesY sont deux listes qui donnent 
# les incertitudes associées (en abscisse et en ordonnée).

ValeursX = [1.,2.,3.,4.]
ValeursY = [9.4,5.1,2.7,1.8]
IncertitudesX = [0.3, 0.3, 0.3, 0.3]
IncertitudesY = [1., 0.5, 1.6, 1.1]

# plt.scatter trace un nuage de points à partir des deux listes de valeurs.
# zorder dicte quels éléments du graphique doivent être au-dessus de quels autres.
# plt.errorbar trace les barres d'incertitudes à partir des listes associées.
# On peut mettre une couleur différente pour le point expérimental et ses
# barres d'incertitudes, mais ce n'est pas forcément joli.

plt.scatter(ValeursX, ValeursY, zorder = 3, color = 'red')
plt.errorbar(ValeursX, ValeursY, xerr = IncertitudesX, yerr = IncertitudesY,
fmt = 'none', capsize = 5, color = 'red', zorder = 3)

# Si besoin on peut superposer un modèle théorique. Pour cela on peut définir
# une fonction que l'on applique à une liste d'absisses.

def modele(x):
    return 9/x

abscisses = np.linspace(0.1,6.,500)
ordonnees_modele = modele(abscisses)
plt.plot(abscisses,ordonnees_modele,zorder=2,color='green')

# On trace le graphique. "loc" indique l'endroit où est placé l'encart
# de légende (ici 1 signifie en haut à droite) ;
# loc=0 proposera le meilleur emplacement automatiquement.
# savefig sauve une image du graphique dans le répertoire courant ;
# dpi permet de modifier la résolution.

plt.grid()
plt.xlim(0., 6.)
plt.ylim(0., 11.)
plt.xlabel('Le paramètre que j ai fait varier (unité)')
plt.ylabel('La grandeur que j ai mesurée (unité)')
plt.title('Titre de mon superbe graphique de TIPE')
plt.legend(('Modèle','Expérience'),loc=1)
plt.savefig('Graphique',dpi=400)
plt.show()
