Absturz nach Plotten mit pylab(MatPlotLib)??

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Zeddelsche
User
Beiträge: 6
Registriert: Freitag 28. September 2007, 07:10

Guten Morgen!

Ich bin neu hier und habe eine Frage zu Matplotlib.

Ich möchte mir einfache Kennlinien plotten lassen, das funktioniert auch. Hier öffnet sich ein Fenster, welches den Plot anzeigt. Dieses Fenster kann ich schließen, wenn ich allerdings mein Programm nochmal ausführe und dann mein Fenster wieder schließen möchte, dann stürzt mein Python ab.

Mein Programm sieht so aus:

Code: Alles auswählen

from pylab import *
figure(1)
plot(Zeit,slipref0,'r')
plot(Zeit,yr,'b')
#plot(Zeit,DELTA,'g')

show()
Hat jemand ähnliche Probleme?

Schon mal vielen Dank für Eure Hilfe!


Gruß,

Michael
[/code]
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hallo und willkommen im Forum!

fast möchte ich vermuten, daß man Dir mit den Infos, die Du gibst nicht helfen können wird.
Magst Du uns ein paar zusätzliche Dinge verraten?
- Welches Betriebssystem verwendest Du und wie hast Du matplotlib (MPL) installiert?
- Welches Backend benutzt Du? (Tk, Wx, Gtk / Agg, Cairo)
- Wie führst Du Dein "Programm" aus? Im interaktiven Modus oder nicht? Von einer Shell? In einer IDE?

Gruß,
Christian
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Waere auch super, wenn du ein funktionstuechtiges Stueck code postest, damit man das direkt mit copy&paste uebernehmen kann.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Zeddelsche
User
Beiträge: 6
Registriert: Freitag 28. September 2007, 07:10

Hi!

Vielen Dank für die erste Kritik. Also, ich arbeite mit Python 2.4 (Enthough-Version), Betriebssystem XP-SP2.

Mein Programm führe ich mit PythonWin aus:

Code: Alles auswählen

# http://www.scipy.org/scipy_Example_List#head-7b70c2c5bff1c7774581f834de2d11a995b4c988
from numpy import *
from numpy.fft import *
#from scipy import *
from pylab import *

sample_rate=1000.00
t=r_[0:0.6:1/sample_rate]
N=len(t)
s=sin(2*pi*50*t)+sin(2*pi*70*t+pi/4)
S=fft(s)
f=sample_rate*r_[0:(N/2)]/N
n=len(f)
#plot(f,abs(concatenate((S[0:n]/N,S[n:0]/N))))
ion()
plot(f,abs(S[0:n])/N)
#show()


print(N, s, S, f, n)

Es liegt aber nicht an diesem Beispiel-Programm, es ist ein generelles Problem.

Nachdem das Programm gestartet wurde, öffnet sich ein neues Fenster, welches dann die Grafik plottet.

Soweit ist alles in Ordnung. Wenn ich allerdings das Programm nochmal laufen lasse, egal ob ich das Figure-Fenster geschlossen habe oder nicht, bleibt alles hängen (PythonWin und das plot-Fenster).

Ich hoffe, das reicht Euch fürs erste...

@ Christian:

ich habe zum einen Matplotlib mit dem Enthough-Package mit installiert, ich habe allerdings auch nochmal die neuere Version von der Homepage installiert, das machte jedoch keinen Unterschied.

Was meinst Du mit --> Welches Backend benutzt Du? (Tk, Wx, Gtk / Agg, Cairo)



Gruß,

Michael
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Zeddelsche hat geschrieben: Was meinst Du mit --> Welches Backend benutzt Du? (Tk, Wx, Gtk / Agg, Cairo)
MPL muß gegen eines dieser Backends (die Dinger, die für die Fenster und das Rendering verantwortlich sind) kompiliert sein. In Deinem matplotlibrc-File steht auch welches. Aber da Du unter Windows arbeitest vermute ich Tk. Das ist in sofern wichtig, als das es hin und wieder Probleme im Zusammenspiel mit den Backends gibt, insbesondere bei Installationen über svn.

Also ich kann das Problem nicht nachvollziehen: ipython / python 2.5.1 unter Ubuntu 7.04 und WxAgg.

Ich habe nur eine Vermutung: Wenn Du das Programm nochmals laufen läßt gehst Du eigentlich nicht aus python raus, oder? D. h. Deine figure ist ein NoneType und den kannst Du nicht zeigen. In Deinem Backend steht

Code: Alles auswählen

if show._needmain:
        Tk.mainloop()
und an der Stelle sollte eigentlich ein Traceback geben:

Code: Alles auswählen

<type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'tk'
Das ist inhärent in MPL so drin: Wenn Du den interaktiven Modus von MPL nutzt, dann ist es so, daß Du in das geschlossene Fenster nicht plotten kannst. Die Lösung ist eine saubere Verarbeitung mit der matplotlib-Umgebung im Gegesatz zur pylab-Umgebung. Oder Du löscht den Inhalt des Fensters (pylab.clf()) und schließt es nicht.

Hilft das weiter? Oder habe ich Dich vielleicht mißverstanden?

Gruß,
Christian

PS Im Übrigen würde ich die *-Importe bleiben lassen. Insbesondere bei so ähnlichen Modulen.
Zeddelsche
User
Beiträge: 6
Registriert: Freitag 28. September 2007, 07:10

Hallo Christian,

ersmal vielen Dank für Deine Mühe! Ich habe Dir allerdings noch verschwiegen, dass ich bzgl.Python noch Einsteiger bin, ich kann Deinen Post leider nicht wirklich nachvollziehen, leider...

Ich beschreibe Dir nochmal etwas genauer, was ich mache:

1. Ich führe den Code so aus, wie er oben steht.
2. Ich schließe den Plot (das Fenster)
3. Dann ändere ich z.B. in dem Programm die Frequenzen und ich führe das Programm nachdem ich es gespeichert habe nochmal aus.
4. Das neue Plotfenster öffnet sich. Wenn ich jetzt das Fenster anklicke, z.B. die Grafik aufzoomen will, oder es wiederum schließen möchte, dann hängt sich das Fenster und PythonWin auf.


Kannst Du mir vielleicht nochmal etwas leichter und einfacher erklären, was da schief geht? Gibt es Befehle, wie z.B. in Matlab clear(), oder so etwas? Oder kann ich in meinem Code etwas verändern, dass ich die Problematik umgehe..? Oder hast Du evtl. noch eine Alternative anzubieten (Wobei mir MatPlotLib eigentlich schon zusagt...)?


Gruß,

Michael
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Zeddelsche hat geschrieben:Gibt es Befehle, wie z.B. in Matlab clear(), oder so etwas?
Na, eigentlich sollte pylab.clf(), wie im vorigen Post angemerkt, eine mögliche Lösung sein - wenn Du das Fenster nicht zwischendurch schließt.

Allerdings finde ich den von Dir beschriebenen Punkt 4 doch etwas seltsam - das habe ich erst ein wenig anders verstanden. Hat jemand mit mehr Windowserfahrung da eine Idee?

Gruß,
Christian
Antworten