# -*- coding: utf-8 -*-
"""Tracé d'un graphique de points expérimentaux et modélisation avec une droite."""
import numpy as np
import matplotlib.pyplot as plt
# listes des points expérimentaux - elles doivent avoir la même longueur!
# pression en hPa
p = [1021,1057,1092,1132,1164,1209,1253,1308,1363,1419,1479,1539,1618,1713,1800,1899]
# volume en mL
Delta_V = [30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15]
def calculer_inverse(liste_valeurs):
"""Fonction calculant l'inverse de chaque valeur d'une liste.
exemple: inverse_p = calculer_inverse( p )"""
nouvelle_liste = []
for v in liste_valeurs:
nouvelle_liste.append(1 / v)
return nouvelle_liste
# on trace Y en fonction de X
X = calculer_inverse(p)
Y = Delta_V
# on modélise Y en fonction de X par une droite y = a x + b
[a, b] = np.polyfit(X, Y, 1)
#on récupère une fonction permettant de calculer les valeurs grâce au modèle
equation_droite = np.poly1d([a, b])
#fabrique le texte pour l'équation y=b + a.x.
text_equation_droite = f"modèle y= a.x + b avec\n a = {a:0.2f} et b = {b:0.2f}"
# données à tracer
plt.plot(X, Y, "b+", label="points expérimentaux")
plt.plot(X, equation_droite(X), "r--", lw=1, label=text_equation_droite)
plt.legend(loc="lower right")
# paramètres du graphique: titre, légendes, limites, etc.
plt.title('$\\Delta V$ en fonction de $\\frac{1}{p}$')
#plt.axis("square") # pour avoir la même échelle sur les axes (peut être omis)
#plt.xlim(0, 8) # valeurs min et max pour l'axe des x (peut être omis)
plt.xlabel("$\\frac{1}{p}$ (en $hPa^{-1}$)")
#plt.ylim(0, 10) # valeurs min et max pour l'axe des y (peut être omis)
plt.ylabel("$\\Delta V$ (en $mL$)")
# affichage du graphique
plt.show()