Wie erhalte ich wieder interaktive Diagramme in Spyder / IPython / matplotlib?

91

Ich habe in Windows 7 ein Upgrade von Python (x, y) 2.7.2.3 auf 2.7.6.0 durchgeführt (und war froh zu sehen, dass ich function_name?die Dokumentzeichenfolge endlich wieder im Objektinspektor eingeben und sehen kann ), aber jetzt funktioniert das Plotten nicht mehr so gewöhnt an.

Zuvor (Spyder 2.1.9, IPython 0.10.2, matplotlib 1.2.1), als ich dieses Skript zum Beispiel plottete , zeichnete es die Nebenplots nebeneinander in einem interaktiven Fenster:

Geben Sie hier die Bildbeschreibung ein

Wenn ich jetzt (Spyder 2.2.5, IPython 1.2.0, Matplotlib 1.3.1) versuche, Dinge zu zeichnen, werden die Unterzeichnungen als winzige Inline-PNGs ausgeführt, was eine Änderung in IPython darstellt :

winzige Inline-PNGs

Also ging ich in Optionen und fand dies:

Grafikoptionen

Das scheint zu sagen, dass ich die alten interaktiven Diagramme zurückerhalten kann, wobei die 4 Nebenbilder nebeneinander angezeigt werden. Wenn ich jedoch zu "Automatisch" wechsle und versuche, etwas zu zeichnen, geschieht nichts. Überhaupt keine Grundstücke.

Wenn ich dieses Dropdown-Menü auf Qt umschalte oder "Unterstützung aktivieren" deaktiviere, wird nur die erste Nebenhandlung oder ein Teil davon gezeichnet und dann gestoppt:

Geben Sie hier die Bildbeschreibung ein

Wie erhalte ich das alte Verhalten von 4 nebeneinander angeordneten Nebenhandlungen in einer einzelnen Figur, mit der ich interagieren kann?

Endolith
quelle
Ich denke, dies sollte als Fehlerbericht an Pythonxy gehen. Meine naive Vermutung ist, dass sie Pyplot verwenden, um all das Plotten zu handhaben und dafür in den Hintern gebissen zu werden (was falsch scheint, weil sie ihr eigenes qt-Widget haben).
Tacaswell
1
@tcaswell Wer ist "sie" und was würden sie anstelle von Pyplot verwenden?
Endolith
1
Können Sie dieses Problem außerhalb von Pythonxy reproduzieren (nur mit Straight Ipython + Qtconsole)? Hier gibt es nicht genügend Informationen, um herauszufinden, was falsch läuft.
Tacaswell
1
Ich würde vermuten, dass es ein Fehler in Spyder ist (Spyder ist die IDE, Pythonxy ist die Distribution).
Thomas K
1
@tcaswell: Aha. Es scheint, dass mein Skript Matplotlib-Fehler erzeugt, die dann an einen anderen Ort als die IPython-Konsole gesendet werden. Sie werden angezeigt, wenn ich stattdessen die Qt-Konsole verwende, und jetzt, wo ich danach suche, werden sie auf der regulären Registerkarte "Konsole" von Spyder angezeigt. Wenn ich ein einfacheres Skript mache, funktioniert es, egal ob Zustandsmaschine oder objektorientiert. Ich nahm an, dass ich einige IPython-Einstellungen aufgrund der neuen Inline-Diagramme ändern musste.
Endolith

Antworten:

134

Ändern Sie das Backend auf automatisch:

Extras> Einstellungen> IPython-Konsole> Grafik> Grafik-Backend> Backend: Automatisch

Dann schließen und öffnen Sie Spyder.

Victor Arellano
quelle
27
Das Schließen und Öffnen ist in der Tat notwendig. Ich frage mich nur, warum dies nicht der Standardwert ist.
Mathias711
5
Für alle, die ihre Plots immer noch nicht sehen (wie ich es nicht war), wird das Plotfenster möglicherweise still hinter Ihrem Konsolenfenster angezeigt (zumindest in Spyder unter Windows 10), sodass Sie möglicherweise nach Ihrem Fenster suchen müssen.
Joshua Glazer
3
Für diejenigen, die Schwierigkeiten haben, dies zu finden, befindet es sich am python > preferences > IPython console > Graphics > Graphics backend > Backend: Automatic
8.
6
Anstatt Spyder neu zu starten, können Sie den Kernel auch einfach neu starten (entweder durch Klicken auf das Einstellungsrad in der Konsole und dann auf "Kernel neu starten" oder über eine Tastenkombination (auf Mac Cmd +.)
Michael
Ich habe keine Ahnung warum, aber als ich zu Automatisch wechselte, Spyder neu startete und dann wieder zu Inline wechselte, wurden die Inline-Diagramme immer dann angezeigt, wenn ich einen Eingabebefehl in einer Schleife ausgab. Das ist sehr hilfreich!
Josiah Yoder
50

Sie können dies schnell steuern, indem Sie integrierte magische Befehle in die IPython-Konsole von Spyder eingeben , die ich schneller finde, als diese aus dem Einstellungsmenü auszuwählen. Änderungen werden sofort wirksam, ohne dass Spyder oder der Kernel neu gestartet werden müssen.

Geben Sie Folgendes ein, um zu "automatischen" (dh interaktiven) Plots zu wechseln:

%matplotlib auto

Wenn Sie dann wieder zu "Inline" wechseln möchten, geben Sie Folgendes ein:

%matplotlib inline

(Hinweis: Diese Befehle funktionieren nicht in Nicht-IPython-Konsolen.)

Weitere Hintergrundinformationen zu diesem Thema: Zweck von "% matplotlib inline"

Mike T.
quelle
In Python 3.6 erhalte ichmatplotlib inline File "<stdin>", line 1 %matplotlib inline ^ SyntaxError: invalid syntax
Karlo
2
@ Karlo, dass dieser Fehler von einem herkömmlichen "Python" -Interpreter erwartet wird. Diese Syntax gilt nur für Ipython oder Spyder.
Mike T
OK, ich habe es in Spyder verwendet, aber in der Python-Konsole. In der Tat funktioniert es in der IPython-Konsole.
Karlo
3
Gibt es eine Möglichkeit, es mithilfe eines Skripts festzulegen? Nämlich zu wählen, wo die Ausgabe des Diagramms innerhalb eines Skripts ist? Danke.
Royi
1
Dies scheint in Spyder nicht zu funktionieren, obwohl dies in einem normalen IPython-Fenster der Fall ist. Die Verwendung der Menüeinstellungen hat bei mir funktioniert. Ich bin mir nicht sicher, warum das nicht so ist.
Schildkröten sind süß
10

Nach dem Anwenden: Extras> Einstellungen> Grafik> Backend> Automatisch Starten Sie den Kernel einfach neu Geben Sie hier die Bildbeschreibung ein

Und Sie werden sicherlich Interactive Plot erhalten. Viel Spaß beim Codieren!

Archit Pandey
quelle
5

Wie in den Kommentaren gesagt, liegt das Problem in Ihrem Skript. Eigentlich gibt es 2 Probleme:

  • Es liegt ein Matplotlib-Fehler vor. Ich denke, Sie übergeben ein Argument als Noneirgendwo. Vielleicht wegen des Standarddikts?
  • Sie rufen show()nach jeder Nebenhandlung an. show()sollte einmal am Ende Ihres Skripts aufgerufen werden. Die Alternative ist die Verwendung des interaktiven Modus, nach dem Sie ionin der Dokumentation von matplotlib suchen .
J. Martinot-Lagarde
quelle
2

Dies ist eigentlich ziemlich einfach zu beheben und erfordert keine Codierung:

1.Klicken Sie auf die Registerkarte Plots über der Konsole. 2.Klicken Sie dann in der oberen rechten Ecke des Plots-Bildschirms auf die Optionsschaltfläche. 3. Deaktivieren Sie zuletzt die Schaltfläche "Inline-Plotten stumm schalten"

Führen Sie nun Ihr Skript erneut aus und Ihre Grafiken sollten in der Konsole angezeigt werden.

Prost.

Chris
quelle