Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 5: Plotting, Part 1
Wissenschaftliche Programmierung mit Python
- für Meteorologie und Atmosphärenforschung
Martin G. Schultz
Teil 5: Plotting, Part 1
2
Matplotlib: quasi Standard, sehr umfangreich, hohe Qualität, Einbindung in GUIs, starke Entwicklergemeide, …
pyngl: NCAR graphics language; spezialisiert auf “Atmosphärenplots”, leistungsstark, aber nicht immer ganz fehlerfrei, kleine Gruppe von Entwicklern
pygooglechart: Interface zu googlechart
PyGrADS: Interface zu GrADS (2008)
gnuplot.py: Interface zu gnuplot (2008)
Mayavi: 3D plotting package (Enthought)
Andere: PyQwt, biggles, gasp
Python Grafik Module
Matplotlib
• Einfache Bedienung ähnlich MATLAB mit dem pyplot Modul oder ipython
• Vollständige Kontrolle aller grafischen Elemente via objektorientiertem Ansatz
3
Sehr hilfreich: Matplotlib Gallery http://matplotlib.org/gallery.html (Klick auf den Plot zeigt den zugehörigen Quellcode an)Eine sehr gute Übersicht über die wesentlichen Dinge findet sich aufhttp://www.loria.fr/~rougier/teaching/matplotlib/.Für Details siehe auch http://matplotlib.org/api/pyplot_api.html.
• Setzt numpy voraus• Erweiterung basemap zur Kartendarstellung• Erweiterung mplot3d für 3D Plots (alpha-Status)
Matplotlib Konzept
4
FigureCanvas
Renderer
Event
based on article http://www.aosabook.org/en/matplotlib.html
backend layer
Figure
Axes
Line2D
artist layer
XAxis YAxis Text …
x-label x-ticks …
dra
w
Pyplot scripting layer
Figure, Axes, etc.
5
figure
axes(subplot)
(y)axis
Text: xii=0
nfigure.text
axes.title
(x)axis.majorticklabels(x)axis.major_ticks
Matplotlib Koordinatensysteme
matplotlib spends a lot of time transforming coordinates from one system to another. These coordinate systems include:• data: the original raw data values • axes: the space defined by a particular axes rectangle • figure: the space containing the entire figure • display: the physical coordinates used in the output
(e.g. points in PostScript, pixels in PNG)
6from http://www.aosabook.org/en/matplotlib.html
Matplotlib API demo
7
Histogram plot -- Vorbereitung
Version 1: Pyplot (MATLAB ähnliche Kommandosprache)
Version 2: Nutzung von Artists und FigureCanvas
Pyplot: 1-dimensionale Daten
8
Method Function
errorbar Kurve mit Fehlerbalken
loglog, semilogx, semilogy
Plot mit logarithmischen Achsen
plot zeichne Linien und/oder Symbole
plot_date zeichne Kurven mit Datums (x) Achse
plotfile Lese Daten aus Datei und plotte
polar Polarplot
scatter x,y Scatterplot
step Stufenplot
errorbar plot_date polar scatter
Pyplot: 2-dimensionale Daten
9
Method Function
barbs Windsymbole (Richtung und Geschwindigkeit)
contour, contourf Konturplot (clabel für Beschriftung) mit Linien bzw. gefüllt
hexbin „hexagon binning plot „
hist2d 2D Histogramm (ähnlich hexbin)
pcolormesh Farbgitter-Plot (auch pcolor)
quiver 2D Feld von Pfeilen (z.B. Windvektoren)
streamlines Strömungslinien
tricontour, tricontourf Konturplot mit Triangulation (Linien bzw. gefüllt)
tripcolor Farbfeld mit Triangulation
triplot Gitterplot mit Triangulation
barbs contour
hexbin
hist2d tricontourf triplotstreamlines
DER PLOT-BEFEHL UND PLOT-OPTIONEN
Darstellung von Zeitreihen
10
plt.plot – hatten wir schon mal…
11siehe PythonWiss01_introduction
Der plt.plot Befehl
12
x-Werte: meist ein numpy array. Wird nur ein Argument angegeben, dannstehen hier die y-Werteund x wird von 0 bislen(y) gezählt.
y-Werte: meist ein numpy array.
Farbe und Plotsymbol („marker“). Statt dieser Kurzform kann auchmarker=„x“ undmarkerfacecolor=„r“ angegeben werden. Weiter kann eine Verbindungslinie spezifiziert werden (z.B. ′-′).
Ein Text für die Legende.
Der plt.plot Befehl vollständig (1)
13
Das kann sehr nützlich sein, um die Linieneigenschaften nachträglich zu ändern!
Plot line and marker symbols
14
lines
Keyword arguments:
alpha = 0..1 (opaqueness)
linestyle = -, Nonelinewidth = 3.
marker = * , Nonemarkeredgecolor = k|r|g|b|c|m|y|w|#ffc000 , Nonemarkeredgewidth = 2.
markerfacecolor = k|r|g|b|c|m|y|w|#ffc000 , Nonemarkersize = 8.
for more options, seehttp://matplotlib.org/api/pyplot_api.html
plt.plot Keywords (1)
15… (siehe http://matplotlib.org/api/pyplot_api.html)
* Beispiel folgt (Info: diese Keywords entsprechen line2D Eigenschaften)
Keyword Beschreibung
*alpha Transparenz-1 (0 = transparent, 1 = opak)
animated {True, False}See http://www.scipy.org/Cookbook/Matplotlib/Animations
*antialiased {True, False}
axes Referenz zum Koordinatensystem (siehe OO-Plotting)
*clip_box Clip (Abschneiden) am Rand einer gegebenen Bounding Box
*clip_on Clip (Abschneiden) am Achsenrand{True, False}
clip_path {[ (Path, Transform) | Patch | None ]}See http://matplotlib.org/examples/api/clippath_demo.html
*color Farbe (der Linie)
contains Für Event-Handling{callable function}See http://matplotlib.org/users/artists.html
Keyword Beschreibung
*dash_capstyle
{″butt″, ″round″, ″projecting″}
dash_joinstyle
{″miter″, ″round″, ″bevel″}Kein sichtbarer Effekt(?)
*dashes {sequence of on/off ink in points}
*drawstyle {″default″, ″steps″, ″steps-pre″, ″steps-mid″, ″steps-post″}
figure Referenz zum „Panel“ (siehe OO-Plotting)
*fillstyle Füllung der Symbole {″full″, ″bottom″, ″left″, ″right″, ″top″, ″none″}
gid {an id string}irgendeine kryptische Bedeutung…
label Bezeichnung der Kurve (siehe legend() )
*linestyle Linienart {″-″, ″--″, ″-.″, ″:″, ″None″, ″ ″, ″″ or same with prepended drawstyle ″steps--″}
*linewidth Stärke der Linie in Punkten {float}
plt.plot Keywords (2)
16… (siehe http://matplotlib.org/api/pyplot_api.html)
Keyword Beschreibung
lod „Level of detail“ {True, False}
marker Markierungssymbol (siehe unten)
markeredgecolor
Farbe des Symbol-Umrisses (siehe unten)
markeredgewidth
Linienstärke des Symbolumrisses {float}
*markerfacecolor
Füllfarbe des Symbols (siehe unten)
*markerfacecoloralt
Zweite Füllfarbe des Symbols bei fillstyle== ″bottom″, ″left″, ″right″, ″top″ (siehe unten)
*markersize Symbolgröße {float}
markevery {None | integer | (startind, stride)}
picker {float distance in points or callable pick function fn(artist, event)}
pickradius {float distance in points}
Keyword Beschreibung
rasterized Zeichne Element als Pixelgrafik{True, False, None}Effekt nur bei Vektor-Renderern (pdf, postscript)
solid_capstyle
{″butt″, ″round″, ″projecting″}see dashed_capstyle
solid_joinstyle
{″miter″, ″round″, ″bevel″}see dashed_joinstyle
*transform Koordinatentransformation (z.B. „axes“ coordinates (0..1) statt Datenkoordinaten) (siehe unten)
url {a URL string}???
visible {True, False}
zorder Anordnung („layer“) auf der Leinwand. Höhere Werte werden später gezeichnet {int}
Plot Optionen - Demo
17see plot_options_demo.py
clip
Custom plot markers
18
Regular polygons can be defined with a tuple (nedges, type, angle):
(7, 0, 30) - polygon
(7, 1, 30) - star
(7, 2, 30) - asterisk
Letters, numbers and math symbols can be plotted via LaTex strings:
r′$\sum′
r′$\tau′ Use raw strings, else \t will be interpreted as TAB!
plt.plot(…, marker= )
You can define any marker using a vertex list:
((0.5,0.5),(0.,0.),(0.5,-0.5),(-0.5,-0.5),(0.,0.),(-0.5,0.5),(0.5,0.5)) a tuple of tuples
… or a path object (see http://matplotlib.org/api/path_api.html#matplotlib.path.Path)
Plot Optionen festlegen
1. Durch Keyword Argumente im plot Befehl
2. A la MATLAB durch den plt.setp Befehl
3. Durch Aufruf der entsprechenden set_... Methode des jeweiligen Objekts
19
Titel, Text und Achsenbeschriftungen
20
plt.xlabel(″x-Achse″)
plt.ylabel(″y-Achse″)
plt.title(″Mein toller Plot″)
plt.text(x, y, ″Annotation″)
plt.annotate(…)
plt.suptitle(″Bildueberschrift″)
plt.figtext(x, y, ″Bildtext″)
suptitle
title
xlabel
ylab
el
ax.set_xlabel(…)
ax.set_ylabel(…)
ax.set_title(…)
ax.text(…)
ax.annotate(…)
fig.suptitle(…)
fig.text(…)
Beschriftung mit mathematischen Symbolen
• Alle Textobjekte in Python matplotlib können mathematische Zeichen enthalten
• „mathtext“ stellt einen großen Umfang der Latex Zeichen dar
21
raw string normaltext
group
mathtext
Anpassung von Plot-OptionenBeispiel: Temperatur-Zeitreihen (Dateien aus Teil 4: meteo_record_bonn-endenich_2011.csv und meteo_record_bonn-endenich_2012.csv)
1. Einfacher Plot2. Linienstil und Farben, Symbole, Achsenbeschriftungen,
formatiertes Datum3. Text-Kontrolle, mathematischer Text, Überschriften,
weitere Plot-Optionen4. Axes Layout Kontrolle, mehrere Plots (=Axes), gemeinsame
Achsen, weitere Textkontrolle5. Etwas Datenprozessierung, Überlagerung zweier Kurven
mit Transparenz, Datumsumwandlung, forcierte Labels, Legende
22
23
1. E
infa
cher
Plo
t
Daten einlesen
csv2rec: Variablennamen sindimmer lowercase (s. Teil 4)
24
1. E
infa
cher
Plo
tErgebnis
Achsen werden automatisch skaliert, x-Achse wird automatisch als Datum beschriftet, Farben werden automatisch gewählt
25
2. L
inie
nstil
und
Far
ben,
Sym
bole
, Ac
hsen
besc
hrift
unge
n, fo
rmati
erte
s D
atum
Daten einlesen
rote Kreise mit durchgezogener Linie
Achsenbeschriftung
Definiere Datumsformat(s. Teil 4)
Wende Format an
26
Ergebnis2.
Lin
iens
til u
nd F
arbe
n, S
ymbo
le,
Achs
enbe
schr
iftun
gen,
form
atier
tes
Dat
um
27
3. T
ext-K
ontr
olle
, mat
hem
atisc
her T
ext,
Übe
rsch
riften
, wei
tere
Plo
t-Opti
onen
Daten einlesen
Font-Eigenschaften
Setze Font-Eigenschaften als default
Fasse Plot-Optionen in dictionary zusammen
Übergebe keywords als dict
ein bisschen Mathe-Text
3. T
ext-K
ontr
olle
, mat
hem
atisc
her T
ext,
Übe
rsch
riften
, wei
tere
Plo
t-Opti
onen
Ergebnis
29
4. A
xes
Layo
ut K
ontr
olle
, meh
rere
Plo
ts
(=Ax
es),
gem
eins
ame
Achs
en, w
eite
re
Text
kont
rolle
Lese jeweils zwei Temperaturvariablen aus einer Datei
30
4. A
xes
Layo
ut K
ontr
olle
, meh
rere
Plo
ts
(=Ax
es),
gem
eins
ame
Achs
en, w
eite
re
Text
kont
rolle
pos enthält: x0, y0, x1, y1, width, height
rows columns
31
4. A
xes
Layo
ut K
ontr
olle
, meh
rere
Plo
ts
(=Ax
es),
gem
eins
ame
Achs
en, w
eite
re
Text
kont
rolle
Unicode Grad-Symbol\u00B0
Ausrichten der y-Achsen Beschriftung
32
Ergebnis4.
Axe
s La
yout
Kon
trol
le, m
ehre
re P
lots
(=
Axes
), ge
mei
nsam
e Ac
hsen
, wei
tere
Te
xtko
ntro
lle
33
5. Ü
berla
geru
ng z
wei
er K
urve
n m
it Tr
ansp
aren
z, D
atum
sum
wan
dlun
g, fo
rcie
rte
Labe
ls, L
egen
de
Trick zur Umwandlung vondatetime Objekten in „Tag im Jahr“
34
5. Ü
berla
geru
ng z
wei
er K
urve
n m
it Tr
ansp
aren
z, D
atum
sum
wan
dlun
g, fo
rcie
rte
Labe
ls, L
egen
de
Text für Legende
30% Transparenz
35
5. Ü
berla
geru
ng z
wei
er K
urve
n m
it Tr
ansp
aren
z, D
atum
sum
wan
dlun
g, fo
rcie
rte
Labe
ls, L
egen
deExplizite Werte für Ticks und Beschriftung
36
Ergebnis5.
Übe
rlage
rung
zw
eier
Kur
ven
mit
Tran
spar
enz,
Dat
umsu
mw
andl
ung,
forc
iert
e La
bels
, Leg
ende
Warum OO?
• Pyplot (und MATLAB) benutzen das Konzept der „current figure“ und „current axes“, d.h. das Programm merkt sich die letzten Einstellungen
• Interaktive Anwendungen mit GUI oder Grafiken mit mehreren Panelen, die voneinander abhängen sollen, sind mit Pyplot zu beschränkt, da jedes „Fenster“ seine eigenen Einstellungen verwalten können soll
37… aber das ist eher für Fortgeschrittene interessant...
EXKURS: Objekt-Orientierte Programmierung
Matplotlib Klassen
• Figure: quasi das Blatt Papier bzw. die Datei, auf dem/in der alle Plots angeordnet sind
• Axes: ein rechteckiger Bereich, der ein Koordinatensystem hat und in dem gezeichnet werden kann. Jeder „subplot“ definiert seine eigenen axes.
• Artist: Basisklasse für alles, das gezeichnet wird– Line2D: Linien und Symbole– patches: Polygone– text: Text und TextWithDash
• colors, cm: Farbdefinitionen und Farbtabellen• ticker: Formatierung von Achsenabschnitten
38
(nur die wichtigsten)
Da kommen wir später vielleicht drauf zurück. Erst einmal nicht so wichtig; hilft aber u.U. beider Suche nach keyword Optionen etc.
EXKURS: Objekt-Orientierte Programmierung
OO Beispiel (Forts.)
39
Rückgabewert von ax.plot ist eine Line2D Instanz. Diese kann man benutzen,um die Eigenschaften der Kurve nachträglich zu ändern:
Tipp: line, = … ist das sogenannte „tuple unpacking“. Der plot Befehl gibtimmer eine Liste von Linienobjekten zurück. Statt lines = ax.plot(…) ; line = lines[0] kommt man durch tuple unpacking mit einem Befehl aus.
Siehe auch: http://matplotlib.org/contents.html
EXKURS: Objekt-Orientierte Programmierung
HowTo: Achsen ohne Ticks und Beschriftung
40
ax.get_xaxis().set_visible(False)ax.get_yaxis().set_visible(False)oder:ax.get_xaxis().set_ticks([])ax.get_yaxis().set_ticks([])(die zweite Variante erlaubt immer noch ein xlabel bzw. ylabel anzuzeigen)
Hat man das ax Objekt nicht, kann man es ermitteln:ax = fig.get_axes()[0] (sofern man das fig Objekt kennt)(ax ist eine Liste von Achsensystemen!)oder:ax = plt.gca() (ermittelt das aktuelle Achsenobjekt in pyplot)
Anhang 1: Die Pyplot Befehle• Darstellung 1-dimensionaler Daten• Darstellung 2-dimensionaler Daten• Statistische Plots• Autokorrelation, Spektralanalyse, etc.• Einbettung von Bildern• Grafik anzeigen und speichern• Beschriftung, Titel, Legende• Grafische Elemente• Kontrolle der Achsendarstellung• Farbtabellen, Farbmanagement• Figure und Axes Kontrolle• Sonstiges
41
Pyplot: 1-dimensionale Daten
42
Method Function
errorbar Kurve mit Fehlerbalken
loglog, semilogx, semilogy
Plot mit logarithmischen Achsen
plot zeichne Linien und/oder Symbole
plot_date zeichne Kurven mit Datums (x) Achse
plotfile Lese Daten aus Datei und plotte
polar Polarplot
scatter x,y Scatterplot
step Stufenplot
errorbar plot_date polar scatter
Pyplot: 2-dimensionale Daten
43
Method Function
barbs Windsymbole (Richtung und Geschwindigkeit)
contour, contourf Konturplot (clabel für Beschriftung) mit Linien bzw. gefüllt
hexbin „hexagon binning plot „
hist2d 2D Histogramm (ähnlich hexbin)
pcolormesh Farbgitter-Plot (auch pcolor)
quiver 2D Feld von Pfeilen (z.B. Windvektoren)
streamlines Strömungslinien
tricontour, tricontourf Konturplot mit Triangulation (Linien bzw. gefüllt)
tripcolor Farbfeld mit Triangulation
triplot Gitterplot mit Triangulation
barbs contour
hexbin
hist2d tricontourf triplotstreamlines
Pyplot: Statistische Plots
44
Method Function
bar Balkendiagramm, optional mit Fehlerbalken
barh Horizontaler Barplot
boxplot Box und Whisker Plot (auch horizontal)
hist Histogramm
pie Tortendiagramm
bar boxplot hist pie
Pyplot: Autokorrelation etc.
45
Method Function
acorr Autokorrelation
cohere Kohärenzplot
csd „cross spectral density“
psd Powerspektrum
specgram Spektrogramm
xcorr Kreuzkorrelation
acorr
xcorr
cohere
csd
psd
specgram
Pyplot: Einbettung von Bildern
46
Method Function
imread Bilddatei einlesen
imsave Bild in Datei speichern
imshow Bild darstellen
siehe auch http://matplotlib.org/users/image_tutorial.html
Pyplot: Grafik anzeigen&speichern
47
Method Function
savefig Bild als (png) Datei speichern
show Bild in einem interaktiven Fenster anzeigen
Interaktive Grafiknach show()
Pyplot: Beschriftung, Titel
48
Method Function
annotate Text und Pfeil
colorbar Farbbalken zeichnen
figlegend Legende für eine Figure (siehe legend)
figtext Text der Figure hinzufügen (siehe text)
legend Legende (für Axes)
suptitle Überschrift für die Figure
text Text (in ein Axes Objekt)
title Titel eines Axes Objekts
annotate
Pyplot: Grafische Elemente
49
Method Function
arrow Pfeil
axhline, axvline horizontale/vertikale Linie über die gesamte Breite/Höhe
axhspan, axvspan Rechteck über die gesamte Breite/Höhe
fill Zeichne gefüllte Polygone
fill_between, fill_betweenx
Fülle Zwischenraum zwischen zwei Kurven
hlines, vlines Horizontale und vertikale Linien
rgrid, thetagrids Radiale Gitterlinien für einen Polarplot und deren Position
vlines axvlineaxvspan
axhspan
axhline
hlines
fill_between
Pyplot: Achsenkontrolle
50
Method Function
autoscale Berechne Skalierung der Achsen
axis Lese oder setze Achseneigenschaften
box Rahmen um Achsen an oder ausschalten
grid Schalte Achsengitter an oder aus
locator_params, tick_params
Achsen-Ticks Eigenschaften
minorticks_off, minorticks_on
Schalte Achsen-Subticks aus/an
ticklabel_format Formatiere Achsenbeschriftung
twinx, twiny Zweite x bzw y Achse
xlabel, ylabel Achsenbeschriftungen
xlim, ylim Achsen-Wertebereich
xscale, yscale lineare bzw. logarithmische Skalierung
xticks, yticks Tickpositionen und Label
Pyplot: Farbtabellen etc.
51
Method Function
autumn, bone, cool, copper, flag, gray, hot, hsv, jet, pink, prism, spectral, spring, summer, winter
Wahl der entsprechenden Farbtabelle
clim Setze Farbgrenzen für Bilder
set_cmap Setze Farbtabelle
Pyplot: Figure und Axes Kontrolle
52
Method Function
axes Füge Axes Objekt zur Figure hinzu
cla, clf Lösche aktuelle Axes bzw. Figure
delaxes Lösche ein Axes Objekt aus der Figure
figure Erstelle neues Figure Objekt
gca, gcf, gci Liefere aktuelle Axes, Figure, bzw. „Bild“ („colorable artist“)
margin Ränder (um Axes) einstellen
sca Setze eine Axes als aktuelle
subplot Erzeuge eine neue Axes und ordne sie auf der Figure an
subplots Erzeuge rows*columns Achsensysteme (optional mit geteilten Achsen)
Pyplot: Sonstiges
53
Method Function
get_plot_commands Liste der verfügbaren Plot Befehle (quasi Online-Hilfe)
rc, rcdefaults Setze Default-Einstellungen (nützlich z.B. zur Wahl der Schriftart)
setp Setze Artist Eigenschaften
Pyplot: …und noch mehr…• broken_barh• close• connect• disconnect• draw• findobj• figimage• get_current_fig_manager• get_figlabels• get_fignums• ginput• hold• ioff• ion• ishold• isinteractive
• matshow• over• pause• sci• spy• subplot2grid• subplot_tool• subplots_adjust• switch_backend (experimental)• table• tight_layout (für subplot)• waitforbuttonpress
54