Python Matplotlib hängt gefragt, wenn ein zweites Diagramm zum Plotten (nach dem ersten Diagramm Fenster geschlossen)

StackOverflow https://stackoverflow.com/questions/1219394

  •  10-07-2019
  •  | 
  •  

Frage

Weird-Verhalten, ich bin sicher, dass es mir zu vermasseln, aber ich möchte auf den Grund, was passiert bekommen:

Ich verwende den folgenden Code ein sehr einfaches Grafikfenster mit matplotlib zu erstellen:

>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111)
>>> ax.plot((1, 3, 1))
[<matplotlib.lines.Line2D object at 0x0290B750>]
>>> plt.show()

und wie erwartete ich das Diagramm erwarten ist, in einem neuen Fenster, das geknallt hat, eine sehr einfache blaue Linie enthält, geht von 1 bis 3 wieder auf 1 wieder auf dem y-Achse, mit 0, 1, 2, wie der x-Achse zeigt (wie Beispiel). Nun schließe ich das Grafikfenster (mit Quer Schaltfläche oben rechts unter Windows). Das gibt mir die Steuerung an den Dolmetscher, und ich beginne wieder, die Schaffung neuer Objekte:

>>>
>>> fig1 = plt.figure()
>>> bx = fig1.add_subplot(111)
>>> bx.plot((1, 3, 1))
[<matplotlib.lines.Line2D object at 0x029E8210>]
>>> plt.show()

Dieses Mal aber, bekomme ich einen Fensterrahmen, mit nichts drin (nur der Rahmen, kein weißer Hintergrund nichts), und die ganze Knall schießen hängt. Ich habe auf „Task beenden“, das Python-Interpreter durch das System beendet wird, und ich erhalte eine Eingabeaufforderung zurück. Ein ähnliches Verhalten auf einem Mac (außer es tatsächlich die Grafik zuerst, bevor auch hängt nicht plotten).

Also irgendwie Python und / oder matplotlib will mich nicht das Fenster manuell schließen. Jeder weiß, was los ist und was soll ich tun? Was ich möchte, ist zu tun, spielen, um mit verschiedenen Parzellen aus dem Dolmetscher, und natürlich tritt dieses Verhalten nicht helfen. Ich weiß, dass ich verwenden könnte „IPython -pylab“, sondern im Interesse des Lernens, ich mag den obigen Fehler verstehen.

Danke.

War es hilfreich?

Lösung

Offenbar wird dies durch einen Fehler in dem tkinter Backend verursacht. Siehe zB https://bugs.launchpad.net/ubuntu/ + Source / matplotlib / + bug / 313.834 . Es wird gearbeitet ... Wenn Sie zu einem etwas älteren tkinter Bibliothek regredieren kann, dass eine Abhilfe für die Zeit Befinden sein sollte (ich lief in das gleiche, was ein paar Wochen, und das war meine einzige Hoffnung).

Andere Tipps

Drei Monate spät zur Party, aber fand ich einen Vorschlag in der matlibplot Dokumentation draw () zu verwenden, anstatt Show (); der ehemalige offenbar nicht nur von der aktuellen Handlung machen, während die letzteren alle interaktiven Tools startet, das ist, wo die Probleme beginnen zu sein scheinen.

Es ist nicht sehr prominent in der Dokumentation gelegt, aber hier ist der Link: http://matplotlib.sourceforge.net/faq/howto_faq.html#use-show

Für das, was es wert ist, ich habe versucht, pylab.show () und hatte genau das gleiche Problem, das Sie haben, während pylab.draw () scheint gut zu funktionieren, wenn ich möchte nur die Ausgabe sehen.

Haben Sie versucht, anstelle des Standard-Python-Interpreter verwenden ipython?

Sie können mit dem folgenden Befehl installieren ipython:

easy_install ipython

und dann hat ipython einen bestimmten Modus mit pylab zu lief, rief -pylab:

ipython -pylab

In[1]: ...

Ich denke, dass die meisten Menschen mit dieser Lösung Graphen mit Python zu zeichnen, ist es eine ähnliche Befehlszeile ist mit dem von R / Matlab, fertigstellung, etc ... und es läuft einen separaten Thread für jede Handlung, so dass es sollte nicht das Problem haben Sie beschrieben haben.

haben Sie versucht:

plt.close()

, um sicherzustellen, dass Sie das Grundstück Objekt geschlossen?

Wie irgendwo oben geschrieben:

Verwenden plt.draw() für alle Grundstücke mit Ausnahme des letzten.

Für Ihre letzte Handlung, die Verwendung plt.show()

Es ist komisch, aber wenn man plt.show() im letzten nicht stattdessen verwenden und versuchen plt.draw(), Sie sehen keine Plots.

Viel Glück dabei!

Ich hatte dieses Problem, wenn TkAgg als Backend verwenden. Nach der Verwendung von plt.close('all') fror mein Computer.

Die Lösung wurde auf ein anderes Back-End zu wechseln. Ich verwende jetzt Qt4Agg statt.

Wenn Sie Qt4Agg installiert es möglich ist, Backends zu wechseln, indem Sie Folgendes eingeben:

plt.switch_backend('Qt4Agg')

, bevor Daten Plotten

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top