Seite 1 von 1

matplotlib

Verfasst: Montag 6. Februar 2006, 13:01
von antimicro
Hi,
ich schau mir gerade das matplotlib Modul an. Scheint ja recht komplex zu sein :shock:

Ich suche die ganze Zeit in der Doku wie ich das Modul Objektorientiert benutze. Wenn ich einen Plot zeichne, dann hätte ich gern ein Objekt an dem ich dann die Achsen beschrifte usw.

Leider sind die Beispiele eher struktoriert.

Hat jemand ne Idee wie ich z.B. zwei Plots zeichne mit unterschiedlichen Eigenschaften?

Verfasst: Montag 6. Februar 2006, 14:47
von CM
Hoi antimicro,

Was meinst Du denn damit?
Leider sind die Beispiele eher stucktoriert.
Zu Deinen Fragen:

Nicht OO-mäßig z. B. so:

Code: Alles auswählen

pylab.grid(True)
pylab.errorbar(x_array,y_array,None,error,fmt='k.')
pylab.plot(x_array,y_array,'r-')
pylab.ylabel('y_label')
pylab.xlabel('x_label')
pylab.title('titel') 
pylab.text('Dir ueberlassen')
pylab.savefig('deinfile.eps')
# und dann ein pylab.close() und dann weiter
und OO:

Code: Alles auswählen

#für zwei subplots
from matplotlib.figure import Figure
fig = Figure(figsize=(7,5),dpi=100)
a = fig.add_subplot(211)
b = parent.fig.add_subplot(212)
# na ja und bei verschiedenen plots einfach mehrer Figure-Instanzen anlegen.
a.semilogy(x.ichannel,x.intensity)
#... .... ...... ........ usw.
Im Übrigen kann ich das "User's Guide'" sehr empfehlen. Du hast Recht: Am Anfang ist es etwas verwirrend, aber dann ...
Und außerdem ist die Mailingliste wirklich toll: Keine noch so dumme Frage, die man mir nicht beantwortet hätte (viel kompetenter, als ich Dir hier antworten kann!).

Gruß,
Christian

Verfasst: Donnerstag 9. Februar 2006, 11:04
von antimicro
Hi,
ja das meinte ich. Das Modul hatte ich gerade erst runtergeladen und pylab und matplotlib.* waren mir fremd.

Ich lese mich jetzt durch die Doku durch :shock: das ist wohl nicht gerade wenig!

Hat vielleicht jemand ne Idee wie ich die X-Achse beschriften kann? In meinem Array hab ich viele UnixTimestamps. Die müssen ja erst umgewandelt werden (keiner will einen reinen Timestamp auf der X-Achse). Gibt es eine fertige Fkt., oder von Hand umwandeln?

Verfasst: Freitag 10. Februar 2006, 10:57
von CM
Hoi,

suchst Du so etwas?

Falls Dir das (und die Demo ;-) ) nicht weiterhilft poste doch mal einen kleinen Auszug aus Deinem array und beschreibe wie Du das geplottet haben möchtest.

Gruß,
Christian

Verfasst: Freitag 10. Februar 2006, 12:14
von antimicro
Das eigentliche Problem ist ein Array mit Tupeln (Timestamp, Wert). Die Tupel werden meist alle 5 Sekunde aber durchaus auch mal alle 30 etc. Sekunden aufgenommen. Der Abstand ist also nicht konstant. Jetzt möchte ich einen Graph der den Tagesverlauf anzeigt.

Dazu brauche ich am besten einen Array mit Feldern für jede Minute des Tages. Das Ursprüngliche Array muss also seine Werte (wenn vorhanden) zusammenfassen und in das neue Array kopieren (zu der passenden Minute).

gar nicht so schwer,oder ?

Verfasst: Freitag 10. Februar 2006, 13:26
von CM
Ja, aber ich würde eine andere Herangehensweise wählen: Warum sich die Mühe machen neue Arrays anzulegen, dreimal miteinander zu verquirlen und dann den Logarithmus ziehen, bevor man plotted?
matplotlib bietet die Möglichkeit mit set_xlim(linker Delimiter, rechter Delimiter) den Bereich zu wählen, über den sich der Plot erstrecken soll. M.a.W. Du übergibst ein array mit unregelmäßig verteilten x-Werten und zwingst matplotlib anschließend dazu die Abstände anzupassen. In deinem Fall also die Minute Null (Mitternacht) bis zur Minute 1440.

Gruß,
Christian

Verfasst: Freitag 10. Februar 2006, 13:46
von antimicro
Hi,
fein, die Fkt. kenn ich noch gar nicht. Danke! Ist schon verblüffend was matplot alles kann -der reine Wahnsinn! :shock:

Ich habs jetzt schnell mit dem weiteren Array geschrieben. Jetzt kann ich die Auflösung auch anpassen etc. Mal schauen was set_xlim kann...