Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Graphique dynamique

4 réponses
Avatar
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

4 réponses

Avatar
Nicolas
Le 04/12/2013 09:52, Youri Ligotmi a écrit :
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


Essaie en multi thread. Un thread pour les calculs et un thread pour
l'affichage.
Avatar
Damien Wyart
* Youri Ligotmi in fr.comp.lang.python:
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.



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
Avatar
Laurent Pointal
Youri Ligotmi wrote:

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é :



<zip>

Voir les pistes ci-dessous

http://stackoverflow.com/questions/11874767/real-time-plotting-in-while-loop-with-matplotlib

<zip>

A+

--
Laurent POINTAL -
Avatar
Youri Ligotmi
Merci à vous 3. Je compile, je teste et je viendrai vous dire ce qu'il
en est du résultat (mais il faudra me laisser un peu de temps je suis un
peu charrette).