Matplotlib python show() retourne immédiatement
J'ai un simple script python qui les parcelles de quelques graphiques dans la même figure. Tous les graphiques sont créés par le tirage au sort() et à la fin, j'ai appeler la méthode show() pour bloquer.
Le script utilisé pour travailler avec Python 2.6.6, Matplotlib 0.99.3, et Ubuntu 11.04. Essayé de l'exécuter sous Python 2.7.2, Matplotlib 1.0.1, et Ubuntu 11.10, mais la méthode show() retourne immédiatement, sans attendre de tuer la figure.
Est-ce un bug? Ou une nouvelle fonctionnalité et nous allons devoir changer nos scripts? Des idées?
EDIT: Il ne garder le tracé ouvert en vertu de la mode interactif, c'est à dire, python -je ..., mais il l'habitude de travailler sans que, et ont essayé de plt.ion() dans le script et l'exécuter en mode normal, mais pas de chance.
- le code est le sujet principal de la SORTE. Nous donner quelques
- Vous êtes correct. J'ai essayé de le reproduire avec un exemple plus simple, mais ne pouvait pas. Je vais essayer de couper vers le bas le code et de mettre en évidence la source du problème.
- une solution pourrait être l'utilisation d'un raw_input() dans la dernière ligne du script
- J'ai pensé à elle et a fait un moment.dormir à la place, mais la figure gestionnaires n'ont pas de travail et il était gelé, donc j'ai arrêté de l'idée, mais, vous avez raison. Avec le raw_input je n'ai pas ce problème!
- super, encore, il devrait fonctionner sans l'aide de raw_input. vous avez un problème quelque part. Essayez de mettre en place un morceau de code qui reproduit l'effet. Ou à l'inverse, trouver le problème dans le code que vous avez retiré pour préparer le morceau de code qui fonctionne maintenant! 🙂
Vous devez vous connecter pour publier un commentaire.
Je pense que l'utilisation de
show(block=True)
devrait résoudre votre problème.show
existe au moins dans matplotlib 1.1.0. Toutefois, la valeur par défaut est de bloquer donc si vous n'avez pas changé le mode précédemment dans le code, la valeur True est pas pertinentplt.show(block=True)
a fait pour moi.Eu le problème inverse, et il semble que matplotlib travaillera en interactif ou non interaxctive mode basé sur un certain nombre de choses que je ne pouvais pas trace (Une sorte de RALENTI, l'autre dans la console du système, d'une façon normale spyder console, un autre dans une autre dédiée ...)
Cela a fonctionné pour moi:
(En fait, je voulais mode interactif, mais dans votre cas, l'inverse devrait aider.)
ion()
etioff()
devrait faire de même, mais le dessus est sur matplotlib niveau, et pas seulement pyplot ou pylab. Cela fonctionne pour moi, même si je suis (plus tard) l'importation de pyplot séparément et ne jamais appeler matplotlib en tant que telle de nouveau. Je pense que la plt.ion() n'a d'effet que sur pyplot, pas d'autres composants de matplotlib qui peut ou peut ne pas être impliqués lors de l'utilisation pyplot.Cette méthode fonctionne pour moi sur Windows 7, l'utilisation de Python 2.65 avec matplotlib 0,99 et Python 2.75 avec matplotlib 1.3.1, au sein de tous les python des consoles et des IDEs sur les deux systèmes (64-bit, deux d'entre eux). Il n'a, cependant, ne fonctionne pas sur Linux (SuSe 11.3, 64 bits), il est donc définitivement une plate-forme de dépendance au jeu ici
À reproduire le matplotlib.show() comportement avec le tkagg backend lors de l'appel de show() sur la Figure de l'objet: