Login
Newsletter
Werbung

So, 22. November 2009, 00:00

Matplotlib und Pylab

Wissenschaftliche Grafiken unter Python

Das Beispiel etwas aufgebessert

Der Funktions-Plot selbst ist noch wenig schön. Eine alternative Version zeigt folgende Zeilen:

#!/usr/bin/env python
# Beispiel 2: Plot der Sinusfunktion
import pylab as p # Import des Moduls pylab und Umbenennung zu p
x = p.arange(0,7,0.01) # Definition der x-Werte
ysin = p.sin(x) # Berechnung der Sinus-Werte
ycos = p.cos(x) # Berechnung der Cosinus-Werte
p.plot(x,ysin,color='red',linewidth=2) # Sinus in rot und Linienstaerke 2
p.plot(x,ycos,color='green',linestyle='dashed',linewidth=2) # gruen gestrichelt
p.grid() # Gitternetz zeichnen
p.xlim(0,2*p.pi) # Plot der x-Werte auf 4-faches von pi beschraenken
p.ylim(-1.05,+1.05) # Plot der y-Werte auf +/- 1.1 beschraenken
p.xlabel('x') # Beschriftung der x-Achse
p.ylabel('y') # Beschriftung der y-Achse
p.legend(('sin','cos'),loc='upper center') # Legende
# Nun Beschriftung der x-Achse mit griechischen Symbolen an den
# Stellen 0, pi/4, pi/2, usw...
# Zuerst die x-Ticks richtig einstellen
xt_orte = p.arange(0,9*p.pi/4,p.pi/4) # alle pi/4-tel einen Tick
# Jeder zweite Tick wird "haendisch" beschriftet
xt_werte =(r'$0$','',r'$\pi/2$','',r'$\pi$','',r'$3\pi/2$','',r'$2\pi$')
p.xticks(xt_orte,xt_werte)
p.show() # Anzeige des Plots auf dem Schirm

Plot der Sinus- und Cosinus-Funktion gemäß »beispiel02.py«, ein wenig hübscher

Dietmar Thaler

Plot der Sinus- und Cosinus-Funktion gemäß »beispiel02.py«, ein wenig hübscher

Der entsprechende Funktionsplot zeigt nun einige Besonderheiten. Die Linien sind dicker. Das wurde durch die Option »linewidth = 2« im plot-Befehl erreicht. Die Farbe kann mit der Option »color« gewählt werden. Zur Auswahl stehen z.B. »red«, »green«, »blue«, »black« und andere. Der Linienstil wird mit »linestyle« gewählt. Neben »solid« (durchgehend) und »dashed« (gestrichelt) stehen »dotted« (gepunktet) und viele mehr zur Verfügung. Eine Zusammenstellung der Optionen des Plot-Befehls ist in der Online-Hilfe zu sehen. Der Befehl »grid()« zeichnet ein gepunktetes Gitternetz in den Plot. Die Befehle »xlim(0,2*p.pi)« bzw. »ylim(-1.05,+1.05)« beschränken die Achsenbereiche auf die angegebenen Werte. Zu beachten ist dabei, dass das Modul pylab auch eine Reihe von mathematischen Funktionen und Konstanten in passender Form zur Verfügung stellt. »p.pi« ruft in diesem Beispiel die Kreiszahl Pi auf. Mit den Befehlen »xlabel('x')« und »ylabel('y')« legt man die Achsenbeschriftungen fest. Mit dem Befehl »title« würde man eine Überschrift festlegen (hier nicht verwendet). »legend« ist für eine passende Legende für die einzelnen Kurven der Grafik zuständig. Mehr Erläuterung verdienen die folgenden etwas komplexeren Code-Zeilen zur Beschriftung der Achsen:

xt_orte = p.arange(0,9*p.pi/4,p.pi/4)

Ein Array wird für den Ort der zu zeichnenden Ticks auf der x-Achse mit den Werten von 0 bis 2 Pi im Abstand von Pi/4 gefüllt (das sind 9 Werte).

xt_werte =(r'$0$','',r'$\pi/2$','',r'$\pi$','',r'$3\pi/2$','',r'$2\pi$')

Ein weites Array wird mit den dazugehörigen Beschriftungen gefüllt, wobei der mathtext-Modus verwendet wird. Die Anzahl der Beschriftungen soll mit dem Ort der Ticks übereinstimmen. Der mathtext-Modus in Strings nimmt einen Sub-Set von Tex/LaTex-Befehlen entgegen. Damit ist eine Darstellung ganzer mathematischer Gleichungen in Beschriftungen möglich. Mit

p.xticks(xt_orte,xt_werte)

wird der Befehl ausgeführt.

Ganz zum Schluss ohne Kommentar ein Beispiel, dessen Ergebnis zum Nachdenken anregen kann. Damit es lauffähig ist, muss die beigefügte Datendatei »co2_mm_mlo.txt« an passender Stelle zur Verfügung stehen. Die entsprechende Code-Zeile im »load«-Befehl muss eventuell angepasst werden.

#!/usr/bin/env python
# Beispiel fuer das Einlesen externer Daten
import pylab as p
# Die arrays datum, co2_inter, co2_trend werden aus dem file
# co2_mm_mlo aus der 3,5 und 6. Spalte eingelesen
# Zeilen, die mit '#' beginnen, sind unberuecksichtigte Kommentarzeilen
jahr,co2_inter,co2_trend = p.loadtxt('./co2_mm_mlo.txt',
	usecols=(2,4,5),unpack=True)
# Das frueheste und spaeteste Datum werden bestimt
mindat = p.amin(jahr); maxdat = p.amax(jahr)
# Plot der beiden Reihen
p.plot(jahr,co2_inter,'r',jahr,co2_trend,'b',linewidth=2)
# X-ticks alle 5 Jahre
p.xticks(p.arange(1950,2020,5))
# Begrenzung des Plots auf Minimum und Maximum des Datums
p.xlim(mindat,maxdat)
# Legende fuer die beiden Kurven
p.legend(('Monatsmittel','Trend'),loc=6)
# Beschriftung der Achsen
p.xlabel('Jahr'); p.ylabel('Konzentration [ppm]')
# Titel der Grafik
p.title(r'$CO_2$ - Konzentration $-$ Messstation Mauna Loa (Hawaii)')
# Gitter zeichnen
p.grid()
# Anzeigen
p.show()

Ein Beispiel - auch zum Nachdenken

Dietmar Thaler

Ein Beispiel - auch zum Nachdenken

Dies soll an Beispielen zur Appetitanregung genügen. Eine recht vollständige Dokumentation bietet die Homepage. Für den Anfänger mag verwirrend sein, dass sich die ausführliche Dokumentation zu den einzelnen Befehlen, wie auch die dargestellten Beispiele, mehr an der objektorientierten Struktur von Matplotlib orientieren und die einzelnen Module und Unter-Module explizit aufgerufen werden, statt des einfacheren Pylab-Wrapper. Wie in Python üblich, bekommt man aber eine Überblick über die Befehle, wenn man in einer Python-Shell nach dem Befehl »import pylab« die Hilfefunktion »help('pylab')« bzw. detailliert z.B. »help('pylab.plot')« aufruft. Eine sehr aktive Mailinglist zu Matplotlib existiert als Matplotlib-users mailing list.

Viel Spaß mit dem neuen Spielzeug!

Referenzen

Dieser Artikel ist in YALM 10/2009 erschienen. Veröffentlichung mit freundlicher Genehmigung des Autors.

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung