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.
Campionissimo
User
Beiträge: 102
Registriert: Montag 28. März 2011, 07:50

Mittwoch 20. Juli 2011, 09:20

Hallo,

bis jetzt hat alles mit MPL funktioniert. Bin eigentlich sehr zufrieden!
Ich habe jetz zwei Kleinigkeiten und ein größere Problem.
Die Kleinigkeiten:
Hab mal in google nachgeschaut aber nicht wirklich was gefunden.
Ich möchte einen plot auf den ganzen Bildschirm ausgeben. Mit dem key f würde es gehen möchte es aber automatisch machen. Des Weiteren kann man in MPL die Position des Fensters bestimmen ?

Jetzt zu meinen größeren Problem:
Ich habe ein Auswahlmenü erstellt 1 2 und 3
wenn ich die 1 drücke kommt der erste plot, denn schließe ich dann wieder
dann kommt die aufforderung der Eingabe wieder. Ich drücke wieder die 1 und mein Programm stürzt ab.
Ich hab keine ahnung warum. Hab mal was mit Backend gelesen, aber...
Was könnte man dagegen tun ?
Vielen Dank hab mir bis jetzt immer gut geholfen;)
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mittwoch 20. Juli 2011, 09:27

Hallo.

Erstelle mal ein Minimalbeispiel, an dem den Problem nachvollzogen werden kann.

Für eine völlig neue Frage kann man übrigens auch ein neues Thema erstellen ;-)

Sebastian
Das Leben ist wie ein Tennisball.
Campionissimo
User
Beiträge: 102
Registriert: Montag 28. März 2011, 07:50

Mittwoch 20. Juli 2011, 10:10

Ein Beispiel, dass den Fehler wiedergibt:

Code: Alles auswählen

while True:
    
    
    zahl = int(raw_input('Ihre Eingabe: '))
    

    if zahl == 0:

        xListA = [1, 2, 3, 4, 5, 6, 7]
        yListA = [5, 10, 15, 20, 25, 30, 35]
        
        fig1 = plt.figure(1)
        ax1 = fig1.add_subplot(111)      
        ax1.plot(xListA,yListA,"b-")
        ax1.set_xlabel('Daten')
        ax1.set_ylabel('Daten]', color='b')
        title('Daten')
        plt.show()

    if zahl == 1:
        
        xListA = [1, 2, 3, 4, 5, 6, 7]
        yListA = [5, 10, 15, 20, 25, 30, 35]
        
        fig1 = plt.figure(1)
        ax1 = fig1.add_subplot(111)
    
        ax1.plot(xListA,yListA,"b-")
        ax1.set_xlabel('Daten')
        ax1.set_ylabel('Daten]', color='b')
        title('Daten')
        plt.show()
Also wenn ich 0 eingebe kommt der plot dann schließe ich ihn und dann kommt die Eingabe aufforderung wieder, dann gib ich nochmal o ein und dann kommt der Fehler
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Mittwoch 20. Juli 2011, 11:23

Und die Fehlermeldung ist?
BlackJack

Mittwoch 20. Juli 2011, 11:42

@gkuhl: Na wahrscheinlich:

Code: Alles auswählen

In [47]: int('o')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)

/home/bj/<ipython console> in <module>()

ValueError: invalid literal for int() with base 10: 'o'
SCNR :twisted:
Campionissimo
User
Beiträge: 102
Registriert: Montag 28. März 2011, 07:50

Mittwoch 20. Juli 2011, 11:59

Fehlermeldung schaut so aus

Code: Alles auswählen

Fatal Python error: PyEval_RestoreThread: NULL tstate
This application has requested the Runtime to terminate it in an unusual way.
Hab aber keine ahnung was das heisst
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Mittwoch 20. Juli 2011, 12:21

Das kann u. U. in Verbindung von numpy und mpl auftreten. Allerdings wird man Dir nicht weiterhelfen können:
1. Versuche bitte ein funktionierendes Minimalbeispiel (vom 1. Import zur letzten Zeile) zu erstellen (also eines, an dem der Fehler reproduziert werden kann).
2. Code bitte etwas ordentlicher (Namen, die sich an Konventionen halten; keine unmotivierten Leerzeichen; löschen und neuplotten, statt ganze Widgets zerstören und neu kreiieren.)
3. Du darfst auch Python-Codetags nutzen. ;-)

Dann: Welches OS nutzt Du? Welche Versionen von mpl und numpy?
Campionissimo
User
Beiträge: 102
Registriert: Montag 28. März 2011, 07:50

Mittwoch 20. Juli 2011, 12:54

Mit dem oben gezeigten Beispiel tritt der Fehler auf. Einfach kopie und in python einfügen.
Durch den Input ist man aufgerufen was einzugeben.
hier 0 oder 1
wenn ich o eingib, dann erscheint der plot (alles IO)
Wenn ich den plot schließe, werde ich durch die while Schleife aufgefordert wieder was einzugeben.
Ich gebe nochmal die 0 ein und es erscheint ein leerer plot mit der fehlermeldung die ich gerade gezeigt habe.
Ich benutze Windows XP
mit Python 2.5.2Die Version von MPL und Numby weiss ich jetzt gar nicht oder wie ich es herausbekomme. Hab aber daruf geachtet das die Versionen sich vertragen
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mittwoch 20. Juli 2011, 13:06

Campionissimo hat geschrieben:Mit dem oben gezeigten Beispiel tritt der Fehler auf. Einfach kopie und in python einfügen.
Hast du es denn selber mal versucht zu kopieren und zu starten?
Das Leben ist wie ein Tennisball.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Mittwoch 20. Juli 2011, 13:27

Bitte erst lesen, dann schreiben.

Und, z.B.:

Code: Alles auswählen

>>> import numpy
>>> numpy.__version__
'1.6.0rc2'
>>> import matplotlib
>>> matplotlib.__version__
'1.0.1'
Aber mal ernsthaft: Du hast doch eine Netzverbindung und einen Browser, oder?

Und noch eine Frage: Geschieht der Fehler unter Verwendung einer IDE?
Campionissimo
User
Beiträge: 102
Registriert: Montag 28. März 2011, 07:50

Mittwoch 20. Juli 2011, 13:55

Jetzt hab ich die Versionsnummern.
MPL: 0.99.3
numpy:1.6.1rc1
Und ich benutzte eine IDE "Eclipse workspace"

Und bei meinem Beispiel hab ich die libs vergessen:
Also hier nochmal:

Code: Alles auswählen

from __future__ import with_statement 
from datetime import datetime 
import time
from pylab import *
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import matplotlib.cbook as cbook
import matplotlib.ticker as ticker
import numpy
from numpy import*
import pylab
from datetime import*
from datetime import datetime
import pylab as plt
from matplotlib.dates import DateFormatter
import  wx
import  wx.lib.layoutf  as layoutf
import os, sys




while True:
    
    
    zahl = int(raw_input('Ihre Eingabe: '))
    

    if zahl == 0:
        
        xListA = [1, 2, 3, 4, 5, 6, 7]
        yListA = [5, 10, 15, 20, 25, 30, 35]
        
        fig1 = plt.figure(1)
        ax1 = fig1.add_subplot(111)
        
        ax1.plot(xListA,yListA,"b-")

        ax1.set_xlabel('Daten')
        ax1.set_ylabel('Daten]', color='b')
        title('Daten')
        plt.show()

    if zahl == 1:
        
        xListA = [1, 2, 3, 4, 5, 6, 7]
        yListA = [5, 10, 15, 20, 25, 30, 35]
        
        fig1 = plt.figure(1)
        ax1 = fig1.add_subplot(111)
        ax1.plot(xListA,yListA,"b-")
        ax1.set_xlabel('Daten')
        ax1.set_ylabel('Daten]', color='b')
        title('Daten')

        plt.show()
         
       
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Mittwoch 20. Juli 2011, 14:13

Das ist immer noch kein Minimalbeispiel. Aber gut, ich (Python 2.7.1, Linux, kernel: 2.6.38-10-generic, oben angegebene numpy und mpl-Versionen) kann das nicht reproduzieren.
Campionissimo hat geschrieben:Hab aber daruf geachtet das die Versionen sich vertragen
Das mag sein, aber offenbar tritt ein Fehler auf, oder? Und da wir theoretisch nichts darüber wissen, sollte es ein Minimalbeispiel sein, damit nicht evtl. andere Abhängigkeiten häßliche und unerwartete Nebeneffekte machen und vor allem, damit wir das evtl. nachvollziehen können. Nehmen wir mal an bei imports aus der Standardbibliothek gibt es nur sauber äufgelöste Abhängigkeiten (in Python kommt das Gegenteil auch rel. selten vor), was kann es dann sein?

Nun, Du könntest der Einfachkeit halber so vorgehen:
- Starte das Skript ohne IDE, was passiert?
- Lösche bitte die unnötigen Importe, die sich teils gegenseitig überschreiben. Du weißt ja gar nicht mehr, was da was macht (spätestens bei einem größeren Programm reitest Du Dich so rein). Was passiert?
- Platziere matplotlib-Importe vor pylab-Importen, ggf. matplotlib.use-Statements vor anderen MPL-Statements (IMHO die zweitwahrscheinlichste Lösung.) Was passiert?
- Bringe (und das halte ich für die wahrscheinlichste Lösung) numpy und mpl und ggf. Python selber (natürlich andere Reihenfolge) auf den letzten Stand, denn in den Mailinglisten ist Dein Problem schon mal aufgetaucht und möglicherweise tritt das bei den aktuellen Versionen nicht mehr auf. Den Fix für die Fehlermeldung habe ich zwar nicht finden können, wohl aber die Ankündigung von John Hunter sich drum zu kümmern.
- Die Änderung Deines OS schlage ich jetzt mal nicht vor ... ;-)
- Und wenn alles nicht hilft: Schau mal in die MPL-Anleitung und lösche den Inhalt des Canvas / der Figur, statt das Fenster zu schließen, dann erst plotte erneut. Was passiert?
Campionissimo
User
Beiträge: 102
Registriert: Montag 28. März 2011, 07:50

Donnerstag 21. Juli 2011, 09:05

Also ich glaube das ich den Fehler habe, aber wie beheben?;)
Ich hab alles getestet von den libs löschen und sortieren usw.
und wollte auch den Inhalt löschen mit clf().
alles der selbse Effekt!
Erste Bild geht mit Inhalt und bei zweiten nur das Grundgerüst und Absturz.

Dann hab ich es ohne IDE getestet und es funktioniert, aber warum?
Ich hab mir schon überlegt das ganze in einen pdf file zu speichern und das zu öffnen und beim nächsten mal das gleiche wieder.

Danke und Grüße
Antworten