2010-02-22 3 views
16

Ich benutze Matplotlib, um Diagramme und Grafiken zu zeichnen.Plotlinien ohne blockierende Ausführung

Wenn ich das Diagramm mit dem Befehl show() plotten, blockiert mein Code bei diesem Befehl.

Ich möchte meine Liste der Werte mit neuen Daten aktualisieren, und dann das Bild im Hintergrund aktualisieren. Wie geht das, ohne jedes Mal das Fenster mit der Grafik zu schließen? ist Unterhalb der Code, den ich durch den Aufruf IPython mit den -wthread (oder der -pylab) Option

import pylab 
a = (1,2,3,4) 
pylab.plot(a) 
pylab.show() # blocks here 
+0

Was passiert, wenn Sie anrufen pylab.show nicht()? – telliott99

+0

Vielleicht möchten Sie eine der Antworten als "akzeptiert" markieren (grünes Häkchen), wenn Sie Ihr Problem gelöst haben. Oder vielleicht fügen Sie Ihre eigene Antwort hinzu, wenn Sie etwas anderes gefunden haben. Oder vielleicht sogar ein Kommentar, um alle wissen zu lassen, dass keine der Antworten funktionierte. :) – EOL

+0

mögliches Duplikat von [Gibt es eine Möglichkeit, Matplotlib-Plots abzutrennen, damit die Berechnung fortgesetzt werden kann?] (Http://stackoverflow.com/questions/458209/is-there-a-way-to-detach-matplotlib- plots-so-dass-die-Berechnung-kann-weitergehen) – Wernight

Antwort

12

In IPython gestartet mit -pylab sollte es nicht blockieren.

Ansonsten: Mit ion() schalten Sie den interaktiven Modus ein. show() blockiert nicht mehr Ihr System . Jede draw() oder plot(x, y) aktualisiert Ihre Handlung.

ioff() schaltet den interaktiven Modus aus. Nützlich, wenn Sie viele Daten hinzufügen und nicht jedes Detail aktualisieren möchten. auch

Siehe: http://www.scipy.org/Cookbook/Matplotlib/Animations

+0

Bei Verwendung von modernem IPython (Jupyter) wurde CLI '-pylab'-Flag zugunsten des pro-Notebook'% pylab'-Befehls veraltet. – tyleha

-1

Das funktioniert verwenden. Es blockiert nicht mehr auf show.

3

Wenn Sie die IPython Shell nicht verwenden, sondern ein Programm ausgeführt wird, möchten Sie wahrscheinlich tun:

für
pyplot.draw() 

nach einem plot(), möglicherweise gefolgt von

raw_input("Press enter when done...") 

, um zu warten, der Benutzer vor dem Plotten etwas anderes.

Wenn Sie pyplot.ion() am Anfang Ihres Programms tun, kann oft sogar übersprungen draw() gemacht werden.

pyplot.show() ist eigentlich eine Endlosschleife, die Ereignisse im Hauptplottenfenster behandelt (z. B. Zoomen, Verschieben usw.).

0

Auf MacOS X hatte ich das Problem, dass nur Entsperrung einen weißen Bildschirm erzeugt. Am Ende half @ tyehas Vorschlag,% pylab direkt im Notizbuch zu verwenden. In der Tat schlägt es, wenn die veraltete die -pylab Flag verwendet:

bash:~/Projects/plyground $ python -m IPython notebook -pylab 
WARNING: `-pylab` flag has been deprecated. 
Use `--matplotlib <backend>` and import pylab manually. 
[E 21:09:05.446 NotebookApp] Support for specifying --pylab on the command line has been removed. 
[E 21:09:05.447 NotebookApp] Please use `%pylab` or `%matplotlib` in the notebook itself. 
Verwandte Themen