bräuchte hilfe, probleme mit matplotlib

Probleme bei der Installation?
Antworten
caneworld
User
Beiträge: 14
Registriert: Donnerstag 6. November 2008, 12:34

Donnerstag 6. November 2008, 12:58

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
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Donnerstag 6. November 2008, 21:23

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.
caneworld
User
Beiträge: 14
Registriert: Donnerstag 6. November 2008, 12:34

Donnerstag 6. November 2008, 21:59

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
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Donnerstag 6. November 2008, 22:04

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
caneworld
User
Beiträge: 14
Registriert: Donnerstag 6. November 2008, 12:34

Donnerstag 6. November 2008, 22:38

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
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Donnerstag 6. November 2008, 23:13

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'
caneworld
User
Beiträge: 14
Registriert: Donnerstag 6. November 2008, 12:34

Freitag 7. November 2008, 08:36

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()
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 7. November 2008, 10:07

Nochmal zur Verdeutlichung:
numerix hat geschrieben:"Die Moral von der Geschicht: Verwende Stern-Importe nicht!"
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

Freitag 7. November 2008, 12:26

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! :)
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
caneworld
User
Beiträge: 14
Registriert: Donnerstag 6. November 2008, 12:34

Freitag 7. November 2008, 17:57

asche über mein haupt ...

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