Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G....

Post on 05-Apr-2015

142 views 3 download

Transcript of Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G....

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