Kein Plotfenster in matplotlib

87

Ich habe gerade matplotlib in Ubuntu 9.10 mit dem synaptischen Paketsystem installiert. Wenn ich jedoch das folgende einfache Beispiel versuche

>>> from pylab import plot;
>>> plot([1,2,3],[1,2,3])
[<matplotlib.lines.Line2D object at 0x9aa78ec>]

Ich bekomme kein Handlungsfenster. Irgendwelche Ideen, wie das Plotfenster angezeigt werden kann?

dzhelil
quelle
7
pylab zeigt das Diagramm standardmäßig nicht an, da das Zeichnen und ständige Aktualisieren teuer sein kann. Sie müssen eine explizite machen show().
Alok Singhal
1
Einige offizielle Dokumentationen zu diesem Thema: matplotlib.org/faq/…
stephenbez

Antworten:

138

Du kannst Tippen

import pylab
pylab.show()

oder besser verwenden ipython -pylab.


Da die Verwendung von pylab nicht mehr empfohlen wird , wäre die Lösung heutzutage

import matplotlib.pyplot as plt

plt.plot([1,2,3])

plt.show()
Peter
quelle
38

pylab.show() funktioniert aber blockiert (Sie müssen das Fenster schließen).

Eine viel bequemere Lösung besteht darin, pylab.ion()beim Start Folgendes zu tun (interaktiver Modus aktiviert): Alle pyplot.*Befehle (die Pylab-Entsprechungen von) zeigen ihre Darstellung sofort an. Weitere Informationen zum interaktiven Modus finden Sie auf der offiziellen Website.

Ich benutze auch das noch bequemere ipython -pylab( --pylabin neueren Versionen), mit dem Sie den from … import …Teil überspringen können ( %pylabfunktioniert auch in neueren IPython-Versionen).

Eric O Lebigot
quelle
1
Aber Sie müssen pylab.show()zuerst anrufen, um überhaupt eine Figur zu öffnen.
Steve Tjoa
3
@Steve: Ich habe die Erfahrung gemacht, dass dies stark vom Backend abhängt. Unter Mac OS X mit der regulären Python-Shell muss ich nicht show () (oder draw ()) ausführen: plot () öffnet ein neues Fenster.
Eric O Lebigot
1
Ah, okay. Guter Punkt. Ich habe nur Erfahrung mit Ipython unter Linux.
Steve Tjoa
draw () funktioniert bei mir nicht, aber pylab.ion () funktioniert. Ich benutze OSx
user1506145
Gleiches hier in der Python-Shell mit der neuesten Matplotlib. Ich habe meine Antwort aktualisiert, danke.
Eric O Lebigot
17

Versuche dies:

import matplotlib
matplotlib.use('TkAgg') 

VOR dem Import von Pylab

Linhares
quelle
10
Was soll das tun?
Nathan Fellman
11

Das folgende Codefragment funktioniert sowohl mit Eclipse als auch mit der Python-Shell:

import numpy as np
import matplotlib.pyplot as plt

# Come up with x and y
x = np.arange(0, 5, 0.1)
y = np.sin(x)

# Just print x and y for fun
print x
print y

# Plot the x and y and you are supposed to see a sine curve
plt.plot(x, y)

# Without the line below, the figure won't show
plt.show()
Neobot
quelle
Wie viele andere Antworten klarstellen, funktioniert dies im Moment möglicherweise für Sie, aber alles hängt davon ab, wie Ihr matplotlib-Backend konfiguriert ist.
Nealmcb
9

Fehler auftauchen? Dies kann darauf zurückzuführen sein, dass das Backend nicht festgelegt wurde. Sie können es über den Python-Interpreter oder über eine Konfigurationsdatei festlegen (.matplotlib/matplotlibrc ) in Ihrem Home-Verzeichnis .

Um das Backend in Code zu setzen, können Sie dies tun

import matplotlib
matplotlib.use('Agg')

Dabei ist 'Agg' der Name des Backends. Welche Backends vorhanden sind, hängt von Ihrer Installation und Ihrem Betriebssystem ab.

http://matplotlib.sourceforge.net/faq/installing_faq.html#backends

http://matplotlib.org/users/customizing.html

Matti Lyra
quelle
1
Funktioniert total, danke. Um es klar auszudrücken, ist es am einfachsten (sobald Sie wissen, dass dies natürlich funktioniert), Ihr Backend auf .matplotlib/matplotlibrczu setzen backend: Agg. Dann müssen Sie nicht usejedes Mal explizit eine :)
dsummersl
2

Modernes IPython verwendet das --matplotlibArgument " " mit einem optionalen Backend-Parameter. Der Standardwert ist "auto", was unter Mac und Windows normalerweise gut genug ist. Ich habe es nicht unter Ubuntu oder einer anderen Linux-Distribution getestet, aber ich würde erwarten, dass es funktioniert.

ipython --matplotlib
Calvinvinette
quelle
0

Wenn Sie auf ein Problem stoßen, bei dem pylab.show()das IPython-Fenster einfriert (dies kann Mac OS X-spezifisch sein; nicht sicher), können Sie im IPython-Fenster cmd-c verwenden, zum Plotfenster wechseln und es bricht aus.

Anscheinend werden zukünftige Aufrufe von pylab.show()das IPython-Fenster nicht einfrieren, sondern nur den ersten Aufruf. Leider habe ich festgestellt, dass sich das Verhalten des Plotfensters / der Interaktionen mit show () jedes Mal ändert, wenn ich matplotlib neu installiere, sodass diese Lösung möglicherweise nicht immer gültig ist.

Keflavich
quelle
0

Wenn Sie IPython mit der --pylabOption starten , sollten Sie show()oder nicht aufrufen müssen draw(). Versuche dies:

ipython  --pylab=inline
Scofield77
quelle
0

--pylabfunktioniert nicht mehr für Jupyter , aber zum Glück können wir der ipython_config.pyDatei eine Optimierung hinzufügen , um sowohl Funktionen pylabals auch autoreloadFunktionen zu erhalten.

c.InteractiveShellApp.extensions = ['autoreload', 'pylab']
c.InteractiveShellApp.exec_lines = ['%autoreload 2', '%pylab']
schneidig
quelle
0

Wenn Sie Benutzer von Anaconda und Spyder sind, ist die beste Lösung für Sie:

Extras -> Einstellungen -> Ipython-Konsole -> Grafikabschnitt

Dann in der Unterstützung für Grafiken (Matplotlib) Abschnitt :

Wählen Sie zwei verfügbare Optionen

und im Grafik-Backend :

Wählen Sie Automatisch

PyMatFlow
quelle
-5

Eine andere Möglichkeit bei der Verwendung von easy_install besteht darin, dass Sie die neueste Version von matplotlib benötigen. Versuchen:

import pkg_resources
pkg_resources.require("matplotlib")

bevor Sie matplotlib oder eines seiner Module importieren.

ramsey0
quelle
2
Dies stellt nur sicher matplotlib, dass es installiert ist, und hat keinen Einfluss darauf, wie die Fensterbehandlung durchgeführt wird.
Tacaswell