Comment obtenir à nouveau des tracés interactifs dans Spyder / IPython / matplotlib?

91

J'ai mis à niveau de Python (x, y) 2.7.2.3 vers 2.7.6.0 dans Windows 7 (et j'étais heureux de voir que je peux enfin taper function_name?et voir à nouveau la docstring dans l'inspecteur d'objets) mais maintenant le tracé ne fonctionne pas comme il habitué.

Auparavant (Spyder 2.1.9, IPython 0.10.2, matplotlib 1.2.1), lorsque je tracais ce script , par exemple, il tracerait les sous-parcelles côte à côte dans une fenêtre interactive:

entrez la description de l'image ici

Maintenant (Spyder 2.2.5, IPython 1.2.0, Matplotlib 1.3.1) quand j'essaye de tracer des choses, il fait les sous-tracés comme de minuscules PNG en ligne, ce qui est un changement dans IPython :

minuscules PNG en ligne

Je suis donc entré dans les options et j'ai trouvé ceci:

options graphiques

ce qui semble dire que je peux récupérer les anciennes parcelles interactives, avec les 4 sous-parcelles affichées côte à côte, mais quand je passe en "Automatique" et que j'essaye de tracer quelque chose, ça ne fait rien. Pas de parcelles du tout.

Si je change ce menu déroulant sur Qt, ou décoche «Activer le support», il trace uniquement le premier sous-tracé, ou une partie de celui-ci, puis s'arrête:

entrez la description de l'image ici

Comment obtenir l'ancien comportement de 4 sous-graphiques côte à côte dans une seule figure avec laquelle je peux interagir?

endolithe
la source
Je pense que cela devrait être un rapport de bogue à pythonxy. Ma supposition naïve est qu'ils utilisent pyplot pour gérer tout ce qui se trouve là-bas et se faire mordre dans le cul (ce qui semble faux, car ils ont leur propre widget qt).
tacaswell
1
@tcaswell Qui sont "ils" et qu'utiliseraient-ils à la place de pyplot?
endolith
1
Pouvez-vous reproduire ce problème en dehors de pythonxy (en utilisant simplement ipython + qtconsole)? Il n'y a pas suffisamment d'informations ici pour déterminer ce qui ne va pas.
tacaswell
1
Je suppose que c'est un bogue dans Spyder (Spyder est l'EDI, pythonxy est la distribution).
Thomas K
1
@tcaswell: Aha. Il semble que mon script génère des erreurs matplotlib qui sont ensuite envoyées ailleurs que dans la console IPython. Ils apparaissent si j'utilise la console Qt à la place, et maintenant que je la cherche, ils apparaissent dans l'onglet Console standard de Spyder. Si je fais un script plus simple, cela fonctionne, que ce soit une machine à états ou orientée objet. J'ai supposé que je devais modifier certains paramètres IPython à cause des nouveaux tracés en ligne.
endolith

Réponses:

134

Changez le backend en automatique:

Outils> préférences> Console IPython> Graphiques> Backend graphique> Backend: Automatique

Puis fermez et ouvrez Spyder.

Victor Arellano
la source
27
La fermeture et l'ouverture sont en effet nécessaires. Je me demande simplement pourquoi ce n'est pas la valeur par défaut.
Mathias711
5
De plus, pour quiconque ne voit toujours pas ses intrigues (comme je ne l'étais pas), la fenêtre de tracé peut apparaître silencieusement_ derrière_ la fenêtre de votre console (du moins dans Spyder sur Windows 10), vous devrez donc peut-être chercher votre fenêtre.
Joshua Glazer
3
Pour ceux qui ont du mal à trouver cela, il est situé àpython > preferences > IPython console > Graphics > Graphics backend > Backend: Automatic
cameronroytaylor
6
Au lieu de redémarrer Spyder, vous pouvez également simplement redémarrer le noyau (soit en cliquant sur la molette des paramètres de la console, puis sur «Redémarrer le noyau», soit via un raccourci clavier (sur Mac Cmd +.)
Michael
Je ne sais pas pourquoi, mais le passage à Automatique, le redémarrage de Spyder, puis le retour à Inline provoquaient le début de l'affichage des tracés en ligne chaque fois que j'émettais une commande d'entrée dans une boucle. C'est très utile!
Josiah Yoder
50

Vous pouvez contrôler rapidement cela en tapant des commandes magiques intégrées dans la console IPython de Spyder, ce que je trouve plus rapide que de les choisir dans le menu des préférences. Les modifications prennent effet immédiatement, sans avoir besoin de redémarrer Spyder ou le noyau.

Pour passer aux tracés "automatiques" (c'est-à-dire interactifs), tapez:

%matplotlib auto

puis si vous souhaitez revenir à "en ligne", tapez ceci:

%matplotlib inline

(Remarque: ces commandes ne fonctionnent pas dans les consoles non IPython)

Voir plus d'informations sur ce sujet: Objectif de "% matplotlib inline"

Mike T
la source
En Python 3.6, matplotlib inline File "<stdin>", line 1 %matplotlib inline ^ SyntaxError: invalid syntax
j'obtiens
2
@Karlo cette erreur est attendue d'un interpréteur "python" conventionnel. Cette syntaxe n'est valide qu'avec ipython ou Spyder.
Mike T
OK, je l'utilisais dans Spyder mais dans la console Python. En effet, cela fonctionne dans la console IPython.
Karlo
3
Existe-t-il un moyen de le définir à l'aide d'un script? À savoir choisir où se trouve la sortie du graphe dans un script? Merci.
Royi
1
Cela ne semble pas fonctionner dans Spyder, même si c'est la manière de le faire dans une fenêtre IPython normale. L'utilisation des préférences de menu a fonctionné pour moi; je ne sais pas pourquoi ce n'est pas le cas.
tortues sont mignonnes
10

Après l'application: Outils> Préférences> Graphiques> Backend> Automatique Redémarrez simplement le noyau entrez la description de l'image ici

Et vous obtiendrez sûrement un tracé interactif. Bon codage!

Archit Pandey
la source
5

Comme indiqué dans les commentaires, le problème réside dans votre script. En fait, il y a 2 problèmes:

  • Il y a une erreur matplotlib, je suppose que vous passez un argument comme Nonequelque part. Peut-être à cause du defaultdict?
  • Vous appelez show()après chaque sous-parcelle. show()devrait être appelé une fois à la fin de votre script. L'alternative est d'utiliser le mode interactif, recherchez iondans la documentation de matplotlib.
J. Martinot-Lagarde
la source
2

C'est en fait assez facile à réparer et ne nécessite aucun codage:

1.Cliquez sur l'onglet Tracés au-dessus de la console. Ensuite, dans le coin supérieur droit de l'écran des graphiques, cliquez sur le bouton Options. 3.Décochez enfin le bouton "Mute inline plot"

Maintenant, réexécutez votre script et vos graphiques devraient apparaître dans la console.

À votre santé.

Chris
la source