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

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
