Bonjour à tous.
Nous avons un graphique, voici le code :
import numpy as np
import math
from matplotlib.pyplot import *
from Tkinter import *
def volume(pK,ca,va,cb,ph):
n = len(pK)
Ke = 1.0e-14
h = 10**(-ph)
c = np.ones(n+1)
Da = 1
kk = 1
for p in range(1,n+1):
kk *= 10**(-pK[p-1])
x = h**p/kk
c[p] = x
Da += x
Na = n
kk = 1
for p in range(1,n):
kk *= 10**(-pK[p-1])
Na += (n-p)*h**p/kk
y = Ke/h-h
vb = va*(y+Na*ca/Da)/(cb-y)
for p in range(n+1):
c[p] *= ca*va/(va+vb)/Da
return [vb,c]
def plot_pH(pK,ca,va,cb,vb_max):
npts = 1000
pH = np.zeros(npts)
vb = np.zeros(npts)
ph_max = 14+math.log10((vb_max*cb-ca*va)/(vb_max+va))
dph = ph_max/(npts-1)
for i in range(npts):
ph = dph*i
[vb[i],c] = volume(pK,ca,va,cb,ph)
pH[i] = ph
plot(vb,pH)
axis([0,vb_max,0,14])
xlabel("vB")
ylabel("pH")
pK = [12.1,7.2,2.15]
ca = 0.01
cb = 0.01
va = 10.0
figure(figsize=(10,6))
vb_max = 40.0
plot_pH(pK,ca,va,cb,vb_max)
grid()
title("$H_3PO_4+NaOH$")
def plot_frac(pK,ca,va,cb,vb_max):
npts = 1000
n = len(pK)
vb = np.zeros(npts)
frac = np.zeros((n+1,npts))
ph_max = 14+math.log10((vb_max*cb-ca*va)/(vb_max+va))
dph = ph_max/(npts-1)
for i in range(npts):
ph = dph*i
[vb[i],c] = volume(pK,ca,va,cb,ph)
for p in range(n+1):
frac[p][i] = c[p]*(vb[i]+va)/(ca*va)*100
for p in range(0,n+1):
s1 = "H_{"+str(p)+"}"
if p==0:
s1 = ""
elif p==1:
s1 = "H"
s2 = "A^{"+str(n-p)+"-}"
if n-p==0:
s2 = "A"
elif n-p==1:
s2 = "A^-"
plot(vb,frac[p],label="$"+s1+s2+"$")
axis([0,vb_max,0,100])
xlabel("vB")
ylabel("%")
figure(figsize=(10,6))
plot_frac(pK,ca,va,cb,vb_max)
legend(loc="upper right")
grid()
title("$H_3PO_4+NaOH$")
show()
Mais voilà, au lieu d'imposer des valeurs à ca, cb et va, nous aimerions créer une interface tkinter permettant à l'utilisateur du programme d'insérer les valeurs qu'ils désirent. Comment peut-on faire ?
Ensuite, ma deuxième question porte sur le graphique. Nous aimerions dessiner des bandes de couleurs sur le premier graphe aux pH : bleu de thymol 1,2 - 2,8 ; bleu de bromothymol 6,2 - 7,6 ; phénolphtaléine 8,0 - 10. Comment peut-on faire ?
Merci d'avance de votre réponse.
Partager