Graphique dynamique
Le
Youri Ligotmi

Bonjour,
Je débute en Python. J'utilise la version 2.7.5 fournie avec la suite
Anaconda.
Pour faire du graphique j'utilise le module matplotlib.pyplot.
Ce que je voudrais faire et que je n'arrive pas à faire serait de
générer progressivement un graphe en fonction de résultats de calculs et
qu'on voit le graphe évoluer en temps réel.
Exemple avec un calcul de pi par monte-carlo, la figure apparaît en
blanc mais tant que le calcul n'est pas fini, rien n'est tracé :
import matplotlib.pyplot as plt
import numpy as np
#fonction aleatoire : renvoie un nombre compris entre a et b
def alea(a,b):
return (b-a)*random()+a
plt.axis([-1.5,1.5,-1.5,1.5])
# Tracé du cercle de rayon 1
x=np.linspace(0,2*np.pi,400)
plt.plot(np.sin(x),np.cos(x),color='b',label='Cercle')
# Tracé du carré de coté 2
plt.plot([1,1],[1,-1],linewidth=2.0,color='r')
plt.plot([1,-1],[-1,-1],linewidth=2.0,color='r')
plt.plot([-1,-1],[-1,1],linewidth=2.0,color='r')
plt.plot([-1,1],[1,1],linewidth=2.0,color='r')
plt.grid()
plt.show()
total = 50000
cont = 0
for i in range(1,total+1):
x=alea(-1,1)
y=alea(-1,1)
if (x**2+y**2)**0.5<=1:
cont = cont+1
plt.plot(x,y,'go')
plt.show()
else:
plt.plot(x,y,'bo')
plt.show()
print 4.*cont/total
Merci d'avance
YL
Je débute en Python. J'utilise la version 2.7.5 fournie avec la suite
Anaconda.
Pour faire du graphique j'utilise le module matplotlib.pyplot.
Ce que je voudrais faire et que je n'arrive pas à faire serait de
générer progressivement un graphe en fonction de résultats de calculs et
qu'on voit le graphe évoluer en temps réel.
Exemple avec un calcul de pi par monte-carlo, la figure apparaît en
blanc mais tant que le calcul n'est pas fini, rien n'est tracé :
import matplotlib.pyplot as plt
import numpy as np
#fonction aleatoire : renvoie un nombre compris entre a et b
def alea(a,b):
return (b-a)*random()+a
plt.axis([-1.5,1.5,-1.5,1.5])
# Tracé du cercle de rayon 1
x=np.linspace(0,2*np.pi,400)
plt.plot(np.sin(x),np.cos(x),color='b',label='Cercle')
# Tracé du carré de coté 2
plt.plot([1,1],[1,-1],linewidth=2.0,color='r')
plt.plot([1,-1],[-1,-1],linewidth=2.0,color='r')
plt.plot([-1,-1],[-1,1],linewidth=2.0,color='r')
plt.plot([-1,1],[1,1],linewidth=2.0,color='r')
plt.grid()
plt.show()
total = 50000
cont = 0
for i in range(1,total+1):
x=alea(-1,1)
y=alea(-1,1)
if (x**2+y**2)**0.5<=1:
cont = cont+1
plt.plot(x,y,'go')
plt.show()
else:
plt.plot(x,y,'bo')
plt.show()
print 4.*cont/total
Merci d'avance
YL
Essaie en multi thread. Un thread pour les calculs et un thread pour
l'affichage.
Pyqtgraph serait peut-être plus adapté pour des graphiques qui doivent
apparaître progressivement. On peut trouver des informations sur la page
suivante :
http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.PYQTLABGraphMath
--
DW
<zip>
Voir les pistes ci-dessous
http://stackoverflow.com/questions/11874767/real-time-plotting-in-while-loop-with-matplotlib
<zip>
A+
--
Laurent POINTAL -
en est du résultat (mais il faudra me laisser un peu de temps je suis un
peu charrette).