Donc, je représente un réseau d'anneau à jeton (faire la simulation dans SimPy), je suis un débutant à matplotlib, mais on m'a dit que ce serait vraiment bon pour représentant visuellement ma simulation. J'ai donc fait des recherches sur Google pour trouver des formes et des lignes - en utilisant add_patch et add_line respectivement sur les axes (je crois). Alors maintenant, j'ai cette sortie qui est absolument parfait:Matplotlib en Python - Dessiner des formes et les animer
(ne peut pas publier des images encore !!) http://img137.imageshack.us/img137/7822/screenshot20100121at120.png
Mais je suis obtenir cette aide de la fonction pylab.show(), et ce que je pense Je veux est d'y parvenir en utilisant la fonction pylab.plot() afin que je puisse ensuite le mettre à jour pendant que ma simulation progresse en utilisant pylab.draw() par la suite.
Mon code est le suivant:
plab.ion()
plab.axes()
for circ in self.circleList:
plab.gca().add_patch(circ)
for line in self.lineList:
plab.gca().add_line(line)
plab.axis('scaled')
plab.show()
Où circleList et sont des listes contenant Liste des lignes des cercles et des lignes sur le diagramme
Je suis probablement mal compris quelque chose de simple, mais je ne peux pas réellement trouver des exemples qui ne sont pas ouvertement basés sur des graphes qui utilisent la fonction plot().
Précision:
Comment puis-je obtenir la même sortie, en utilisant pylab.plot() au lieu de pylab.show()?
Mark, merci pour votre aide. Pour clarifier - ce dont j'ai besoin c'est de changer la couleur des cercles quand un jeton les contourne (ie celui avec le jeton peut être rouge et les autres verts) ceci est piloté par une bibliothèque de simulation, fonctionnant en temps réel . Je sais que vous pouvez redessiner des tracés à la volée en utilisant la méthode pylab.draw() lorsque le mode interactif est activé (pylab.ion) mais vous ne pouvez pas redessiner une image produite en utilisant pylab.show(), une seule produite par pylab.plot() (Je pense !!) J'ai donc besoin d'un moyen de changer les couleurs du cercle individuellement avant de redessiner. J'espère que cela a du sens! Merci –
@Duncan, pylab.draw() bloque le reste de l'application, pour animer avec elle vous passez une fonction de rappel. Comment la fonction est transmise dépend de votre backend. Par exemple avec le GTK par défaut, vous appelez gobject.idle_add (animate); plt.show(). Je pense que votre principal problème est de savoir comment garder une simulation en cours (dans un processus ou un thread séparé) et mettre à jour la fenêtre GTK en même temps. Je vais essayer de trouver un exemple. – Mark
@Duncan, voir les modifications à ma réponse. – Mark