Seite 1 von 1

bräuchte hilfe, probleme mit matplotlib

Verfasst: Donnerstag 6. November 2008, 12:58
von caneworld
guten tag erstmal

ich wurde mit meinem problem hier her verwiesen und hoffe hier kann mir jemand helfen.
ich lerne seit knapp einem jahr python. doch jetzt bin ich auf ein problem gestoßen bei dem mir auch mein software engineering prof nicht weiterhelfen konnte.
also folgendes ...
es geht darum kurven zu plotten.
ich benutze als entwicklungsumgebung eric und hab mir nun (per paketmanager suse 10.3) numpy, scipy und matplotlib installert (keine fehler beim installieren)

allerdings wenn ich nun folgendes laufenlasse

Code: Alles auswählen

# -*- coding: cp1252 -*-

import  numpy as num
# Berechnung der Differenz zwischen 0 un 2 *pi
# zwischen sin(x) und cos(x)

# Werte für x erzeugen (Array)
x = num.linspace(0,  2*num.pi,  100)
differenz = num.sin(x)- num.cos(x)
print differenz

# graphische Darstellung mit matplotlib
from pylab import *
xlabel('x-Werte')
ylabel('y-Werte')
grid()
plot(x,  sin(x),  'c--',  label='sin(x)')
plot(x,  cos(x),  label='cos(x)')
plot(x, differenz,  'm^',  label='Differenz')
legend()

show()
das skript soll mir die sinus und cosinus sowie die different der beiden zwischen null und pi plotten.

allerdinge bekomm ich nach dem ausführen folgende fehlermeldung --> sihe link

Fehler

ich hab keine ahnung was falsch läuft, wäre sehr dankbar für hilfe

Verfasst: Donnerstag 6. November 2008, 21:23
von numerix
Vorweg: Ich habe keinerlei Erfahrung mit matplotlib!

Allerdings kann ich lesen und aus der Doku zu plot() entnehme ich, dass die Argumente Listen sein müssen. Lösung also z.B.:

Code: Alles auswählen

# dein Code wie bisher, dann:
x_values = list(x)
sin_values = list(num.sin(x))
cos_values = list(num.sin(x))
# dein Code wie bisher, dann aber:
plot(x_values, sin_values,  label='sin(x)')
# usw.
Bei mir funktioniert es so.

Verfasst: Donnerstag 6. November 2008, 21:59
von caneworld
erstmal danke für den tipp, aber daran liegt es leider nicht. funktioniert leider auch nicht.
das selbe skript funktioniert ja auf den rechnern meiner hochschule

also sollte es daran nicht liegen.
ich hab keine ahnung voran es liegt aber es muss ja an meinen installationen/configs liegen
google war bis jetzt auch keine große hilfe

Verfasst: Donnerstag 6. November 2008, 22:04
von numerix
Ich kann nur sagen, dass dein Originalcode bei mir dieselbe Fehlermeldung geliefert hat wie bei dir. Nachdem ich - wie gezeigt - Listen erstellt und diese als Parameter übergeben hatte, hat es funktioniert. Warum es bei dir nicht funktioniert: Keine Ahnung.

Zeig doch mal den Code nach der Änderung.

Edit: Ich verwende Python 2.5.1 und matplotlib 0.98.3

Verfasst: Donnerstag 6. November 2008, 22:38
von caneworld
oh man, sorry das war mein fehler
ich hatte den quellcode 2 mal geöffnet. den einen hab ich schön editiert und danach den falschen laufen lassen
:oops: sorry nochmal

ich geh jetzt lieber is bett, bin wohl doch schon zu lange auf den beinen
trotzdem ganz herrzlichen danke für deine hilfe.

stellt sich nur die frage warum das original skript an meiner schule funktioniert, ohne fehler

Verfasst: Donnerstag 6. November 2008, 23:13
von numerix
caneworld hat geschrieben:stellt sich nur die frage warum das original skript an meiner schule funktioniert, ohne fehler
Jetzt habe ich die wirkliche Lösung gefunden:

Beim Import von pylab wird ein str-Objekt namens x implementiert.
Bevor du pylab importierst, bindest du ein array an x, durch den Import wird diese Bindung durch einen String mit dem Inhalt "symlog" überschrieben, bei der Übergabe der Parameter wird dann versucht, die pylab-Funktion sin() auf einen String anzuwenden - das führt dann zur Fehlermeldung.

Lösung: Den Import von pylab nach oben verlegen. Das war's.
"Die Moral von der Geschicht: Verwende Stern-Importe nicht!"

Illustration:

Code: Alles auswählen

In [7]: x = 1
In [8]: from pylab import *
In [9]: x
Out[9]: 'symlog'

Verfasst: Freitag 7. November 2008, 08:36
von caneworld
tatsächlich daran liegts, habs auch grad nochmal getestet

nochmal herrzlichen dank für deine mühe

für jeden dens noch interessiert, so funktionierts jetzt

Code: Alles auswählen

# -*- coding: cp1252 -*-

import  numpy as num
from pylab import *

# Berechnung der Differenz zwischen 0 und 2 *pi
# zwischen sin(x) und cos(x)

# Werte für x erzeugen (Array)
x = num.linspace(0,  2*num.pi,  100)
differenz = num.sin(x)- num.cos(x)
print differenz

# graphische Darstellung mit matplotlib

xlabel('x-Werte')
ylabel('y-Werte')
grid()
plot(x,  sin(x),  'c--',  label='sin(x)')
plot(x,  cos(x),  label='cos(x)')
plot(x, differenz,  'm^',  label='Differenz')
legend()

show()

Verfasst: Freitag 7. November 2008, 10:07
von Leonidas
Nochmal zur Verdeutlichung:
numerix hat geschrieben:"Die Moral von der Geschicht: Verwende Stern-Importe nicht!"

Verfasst: Freitag 7. November 2008, 12:26
von name
Leonidas hat geschrieben:Nochmal zur Verdeutlichung:
numerix hat geschrieben:"Die Moral von der Geschicht: Verwende Stern-Importe nicht!"
Rot einrahmen und auf die Türe kleben! :)

Verfasst: Freitag 7. November 2008, 17:57
von caneworld
asche über mein haupt ...

aber ich lass es mir auf den arsch tattoowieren :lol: