Martin G. Schultz Beginn mit Studentenvortrag 1 aus Teil 1

Slides:



Advertisements
Ähnliche Präsentationen
Excel – Kurs Philip Clasen
Advertisements

Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil3.
Einführung in die Informatik: Programmierung und Software-Entwicklung
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Vorteile der Online-Produkte
CPCP Institute of Clinical Pharmacology AGAH Annual Meeting, 29. Februar 2004, Berlin, Praktischer Umgang mit den Genehmigungsanträgen gemäß 12. AMG Novelle.
Modelle und Methoden der Linearen und Nichtlinearen Optimierung (Ausgewählte Methoden und Fallstudien) U N I V E R S I T Ä T H A M B U R G November 2011.
Design by Contract with JML - Teil 2
= = = = 47 = 47 = 48 = =
Scratch Der Einstieg in das Programmieren. Scatch: Entwicklungsumgebung Prof. Dr. Haftendorn, Leuphana Universität Lüneburg,
Klicke Dich mit der linken Maustaste durch das Übungsprogramm! Vereinfachung von Termen Ein Übungsprogramm der IGS - Hamm/Sieg © IGS-Hamm/Sieg 2006 Dietmar.
WS Algorithmentheorie 02 - Polynomprodukt und Fast Fourier Transformation Prof. Dr. Th. Ottmann.
© 2006 W. Oberschelp, G. Vossen Rechneraufbau & Rechnerstrukturen, Folie 2.1.
Grundkurs Theoretische Informatik, Folie 2.1 © 2006 G. Vossen,K.-U. Witt Grundkurs Theoretische Informatik Kapitel 2 Gottfried Vossen Kurt-Ulrich Witt.
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil2.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Schieferdeckarten Dach.ppt
08-GraphikImplementierung Implementierung der Graphik in EMMA301Paint.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Heute: Scherenzange zeichnen
Bild 1.1 Copyright © Alfred Mertins | Signaltheorie, 2. Auflage Vieweg+Teubner PLUS Zusatzmaterialien Vieweg+Teubner Verlag | Wiesbaden.
20:00.
„Küsse deine Freunde“ – FlexKom-App teilen
1 Fachtagung am Seniorenorientiertes Design und Marketing ThyssenKrupp Immobilien Design for all - Anpassungen im Wohnungsbestand 1.Demographie.
Einführung Capitol Betriebskostenabrechnung
Evaluation des Leitbilds - das Haus des Lernens aus der Sicht der Eltern Umfrage-Ergebnisse.
Medien zwischen Technologie und Gesellschaft Dozent: Herr Prof. Dr. Manfred Thaller SS 13 Referent: Christian Braun.
Icons in der OPAC-Kurzanzeige
Interaktive Karten zur Visualisierung statistischer Daten mit Descartes Vortrag von Annette Eicker GIS - Seminar WS 2000/01.
Gelegentlich wird nach einer Uhr in Powerpoint gefragt.
VS one Veranstalter: VSone Feb. 08 Folie 1 Copyright by XML-Serialisierung zur Persistierung von Objekten Thomas Schissler
Ein kommando unter Windows 7
Wir hören immer von Regeln aus Sicht der Frauen. Hier sind endlich die Regeln aus Sicht der Männer.
Handlingsystem zum automatischen Einsortieren von Gleitlager - Bundbuchsen Frank Schulz (Fa. Mitutoyo Messgeräte GmbH) Alexander Mehl (Fa. Trützschler.
Warum verschwand die Antimaterie?
Betriebliche Aufgaben effizient erfüllen
Inhalt Was ist A-Plan? Einsatzgebiete Organisation der Daten
Eine Einführung in die CD-ROM
OO implementieren Teil IV Objekte erzeugen. © René ProbstModul 226IV - 2 Von der Klasse zum Objekt Plan Bau Objekt Klasse Instanzierung Objekt Das Objekt.
Hi, ich hab hier ein neues Programm, das würde ich gern auf meinem persönlichen System installieren. Es heißt LIEBE. Was soll ich denn da als erstes.
ETS4 - Was ist neu? - Wie fange ich an? - Noch Fragen?
Wir üben die Malsätzchen
Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy.
NEU! 1 2. Wo kommt diese Art von Rezeptor im Körper vor?
Algorithmen und Datenstrukturen Übungsmodul 6
Equals, Hashcode und CompareTo Micha Kessler
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Vorlesung Mai 2000 Konstruktion des Voronoi-Diagramms II
Das ist die Geschichte eines kleinen Jungen aus der Schweiz.
Symmetrische Blockchiffren DES – der Data Encryption Standard
PARTENARIAT ÉDUCATIF GRUNDTVIG PARTENARIAT ÉDUCATIF GRUNDTVIG REPERES KULTURELLER ZUSAMMENHALT UND AUSDEHNUNG DER IDEEN AUF EUROPÄISCHEM.
Das IT - Informationssystem
Zahlentheorie und Zahlenspiele Hartmut Menzer, Ingo Althöfer ISBN: © 2014 Oldenbourg Wissenschaftsverlag GmbH Abbildungsübersicht / List.
MINDREADER Ein magisch - interaktives Erlebnis mit ENZO PAOLO
1 (C)2006, Hermann Knoll, HTW Chur, FHO Quadratische Reste Definitionen: Quadratischer Rest Quadratwurzel Anwendungen.
Pigmentierte Läsionen der Haut
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
Vortrag von Rechtsanwältin Verena Nedden, Fachanwältin für Steuerrecht zur Veranstaltung Wege zum bedingungslosen Grundeinkommen der Piratenpartei Rhein-Hessen.
1 Mathematical Programming Nichtlineare Programmierung.
Technische Frage Technische Frage Bitte löse die folgende Gleichung:
Ertragsteuern, 5. Auflage Christiana Djanani, Gernot Brähler, Christian Lösel, Andreas Krenzin © UVK Verlagsgesellschaft mbH, Konstanz und München 2012.
Es war einmal ein Haus
Kompetenztraining Jura Martin Zwickel / Eva Julia Lohse / Matthias Schmid ISBN: © 2014 Walter de Gruyter GmbH, Berlin/Boston Abbildungsübersicht.
1 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt Wie.
Das IT - Informationssystem
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
Monatsbericht Ausgleichsenergiemarkt Gas – Oktober
 Präsentation transkript:

Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Beginn mit Studentenvortrag 1 aus Teil 1 Teil 6: Plotting, Part 2

Andere Plots, 2D Darstellungen, Karten

1. Box and whisker plots Aus der Matplotlib.axes Dokumentation: Mehrere Datenreihen können als Liste von Listen (bzw. numpy arrays) übergeben werden Beispiel für einfachen Boxplot: …

Gestaltung des Boxplots Boxplot liefert ein dictionary zurück, in dem folgende Informationen gespeichert sind: medians: Liste von Line2D Objekten fliers: Liste von Line2D Objekten whiskers: Liste von Line2D Objekten boxes: Liste von Line2D Objekten (patch_artist=False) oder PathPatch Objekten (patch_artist=True) caps: Liste von Line2D Objekten Um dann z.B. die Box-Füllfarbe zu ändern muss man über die einzelnen Lines oder Patches iterieren (oder die plt.setp() Methode verwenden):

Box-/Whiskerplot Anwendungsbeispiel Modulimport: keine unbekannten Als erstes kümmern wir uns wieder um das Einlesen der Daten. Wie gehabt werden wir csv2rec benutzen. Zuvor definieren wir allerdings zwei Funktionen, die die Datenreihen in monatliche Abschnitte zerlegen: für die Indizes brauchen wir nur die Datumswerte Wir legen eine Liste von Listen an Code adapted from http://matplotlib.org/examples/pylab_examples/boxplot_demo2.html Der jeweilige Ausschnitt der Daten wird als numpy array in der Liste abgelegt.

Box-/Whiskerplot Nun erfolgt das Einlesen der Daten Ermitteln der Indizes Einsortieren der Daten Code adapted from http://matplotlib.org/examples/pylab_examples/boxplot_demo2.html

Box-/Whiskerplot Hier kommt der Hauptteil der Plotarbeit Das Definieren spezieller Unterroutinen macht den Code lesbarer Code adapted from http://matplotlib.org/examples/pylab_examples/boxplot_demo2.html Auch diese Anweisungen könnte man in Unterroutinen „verstecken“…

Box-/Whiskerplot Die Details der Formatierung Im Beispielprogramm sind diese Funktionen im Kopfteil definiert Hier wird das dictionary übergeben, welches boxplot zurückliefert Code adapted from http://matplotlib.org/examples/pylab_examples/boxplot_demo2.html

Box-/Whiskerplot Weiter geht‘s im Hauptprogramm Hier werden einzelne ticklabels unsichtbar gemacht Code adapted from http://matplotlib.org/examples/pylab_examples/boxplot_demo2.html

Box-/Whiskerplot Nun noch die Legende Wir benutzen eine axes.legend statt einer figure.legend, damit die Legende mittig unter dem Plot selbst ist! Und zum Schluss speichern und anzeigen Code adapted from http://matplotlib.org/examples/pylab_examples/boxplot_demo2.html

Box-/Whiskerplot Ergebnis

Karten und Vertikalschnitte Bei der Auswertung von Simulationen mit meteorologischen oder Erdsystemmodellen werden oftmals Kartendarstellungen oder vertikale Schnitte benötigt. Python stellt für Karten die Basemap Ergänzung zu matplotlib bereit. Im Zuge der Darstellung vertikaler Schnitte werden wir uns auch mit (einfacher) Interpolation befassen. Zum Üben benutzen wir die Datei MACC_20121027_0001.nc (zu finden unter ftp://sv02.meteo.uni-bonn.de/pub/maschu/python/data/ MACC_20121027_0001.nc), der übrigens mit dem auf Python und javascript basierenden Web-Interface http://macc.icg.kfa-juelich.de:50080 (demnächst http://join.iek.fz-juelich.de) erzeugt wurde.

Aufwärmen: netcdf Dateien Schauen wir uns erst einmal an, was in der netcdf Datei enthalten ist: Wir erhalten einen Überblick über die Variablennamen, deren Typ, den Dimensionen und den Metadaten-Attributen. Beispiel: Hier steht der Variablenname

Aufgaben Lese den ersten und den letzten Zeitschritt der Variablen vmr_ch2o aus der Datei MACC_20121027_0001.nc ein und speichere diese Daten in der Variable ch2o. Nun lese das dritte „level“ derselben Variablen für alle Zeitschritte ein. Wie erfährst du, welche Dimensionen deine Daten dann haben? Informationen über die Vertikalkoordinate sind in den Variablen lev, bzw. in a, b und ps gespeichert. Welches level ist das „surface level“? Lese jeweils das unterste level für die Variablen vmr_ch2o und vmr_o3 am 9. Zeitschritt aus. (*) Wie könntest du dir eine Zeitreihe der vmr_o3 Daten im untersten level für die Koordinaten lon=7.0667, lat=50.7333 extrahieren? 1.) ch2o=f.variables['vmr_ch2o'][0,:,:,:]; ch2o=f.variables['vmr_ch2o'][-1,:,:,:] 2.) ch2o=f.variables['vmr_ch2o'][:,2,:,:]; ch2o.shape 3.) das erste level ist das surface level. „lev“ gibt nominelle sigma Werte an, der erste ist 0.998… Den aktuellen Druck einer Schicht kann man mit p[k] = a[k]*p0 + b[k]*ps ausrechnen. ch2o=f.variables['vmr_ch2o'][8,0,:,:] o3=f.variables['vmr_o3'][8,0,:,:] 4.) nearest = lambda a,v: np.abs(a-v).argmin() ilon = nearest(lon,7.0667) ilat = nearest(lat,50.7333) print ilon,ilat o3=f.variables['vmr_o3'][:,0,ilat,ilon]

Kartenprojektionen Das Basemap Modul stellt diverse Projektionen zur Verfügung. Beispiele sind:

Kartenprojektionen Für jede Projektion gibt es verschiedene Optionen. Dokumentation unter http://matplotlib.org/basemap/users/mapsetup.html. Beispiel: m (die Instanz des Basemap Objektes) enthält alle benötigten Informationen zur Koordinatentransformation und zum Zeichnen von Kontinenten, etc. Viele der Zeichenroutinen von matplotlib (z.B. contour, contourf) werden von Basemap dupliziert und ggf. durch Koordinatentransformationen ergänzt.

Zeichnen von Kontinenten etc. Variante 1: Zeichnen von Vektordaten Verfügbare Auflösungen*: c(oarse), l(ow), i(ntermediate), h(igh), f(ull) * muss bereits bei der Definition der Projektion angegeben werden Beispiel:

Zeichnen von Kontinenten etc.

Zeichnen von Kontinenten etc. Variante 2: Pixelgrafik als Hintergrund bluemarble shadedrelief etopo

Zeichnen von Kontinenten etc. Hier der Sourcecode zu den letzten Beispielen: warpimage kann ein beliebiges Bild über die Erde legen, sofern das Bild globale Abdeckung hat, ein regelmäßiges Längen- und Breitengitter aufweist, und bei -180 und -90 beginnt. Der Dateiname kann auch eine URL sein (s.o.).

Eigene Daten auf eine Karte zeichnen Basemap stellt folgende Plotroutinen bereit, die größtenteils an matplotlib „weitergereicht“ werden. Man kann genauso gut mit plt.*** plotten; manchmal ist jedoch das Koordinatenhandling einfacher, wenn die Basemap-Version benutzt wird. barbs(x, y, u, v, *args, **kwargs) contour(x, y, data, *args, **kwargs) contourf(x, y, data, *args, **kwargs) hexbin(x, y, **kwargs) imshow(*args, **kwargs) pcolor(x, y, data, *args, **kwargs) pcolormesh(x, y, data, *args, **kwargs) plot(*args, **kwargs) quiver(x, y, u, v, *args, **kwargs) scatter(*args, **kwargs) streamplot(x, y, u, v, *args, **kwargs) zusätzliches keyword: latlon=False Wird latlon auf True gesetzt, werden x und y als longitude und latitude interpretiert (sonst Projektionskoordinaten)

Ein erster Versuch: Contour Code aus map_demo_v01.py

Das Ergebnis… map_demo_v01.py Problem: die longitude Daten belegen den Wertebereich 0..360 Grad, die Kartenprojektion verlangt aber -180..+180 Grad.

Nutze Basemap Routinen für die Koordinatentransformation Code aus map_demo_v02.py …

Das Ergebnis… map_demo_v02.py Noch nicht so schön: Konturlinien zeigen kaum Farbkontrast. Problem: Werte sind „logarithmisch“, Konturskalierung linear

Nutze Basemap Routinen für die Koordinatentransformation Code aus map_demo_v02.py … Das norm keyword legt die Umrechnung der Werte in den Zahlenbereich 0..1 fest. Folgende Normen stehen zur Auswahl: NoNorm Normalize LogNorm

Das Ergebnis… … vielleicht doch lieber gefüllte Konturlinien? map_demo_v03.py … vielleicht doch lieber gefüllte Konturlinien?

Bei gefüllten Konturplots ist zorder nützlich Code aus map_demo_v04.py … Das norm keyword legt die Umrechnung der Werte in den Zahlenbereich 0..1 fest. Folgende Normen stehen zur Auswahl: NoNorm Normalize LogNorm

Das Ergebnis… ohne zorder zorder = 3 map_demo_v04.py ohne zorder zorder = 3 Kommt dem gewünschten Ergebnis doch schon ziemlich nahe…

Feinkontrolle des Farbbalkens Code aus map_demo_v05.py … Benutze einen LogFormatter, um alle Werte am colorbar anzuzeigen. U.U. kann man auch noch das ticks keyword der colorbar Methode verwenden. Anmerkung: colorbars können auch mit „extend= min|max|both“ erweitert werden. Allerdings klappt dies zurzeit nicht mit logarithmischen Werten.

Das Ergebnis… map_demo_v05.py

Mehr Karten… siehe http://matplotlib.org/basemap/users/examples.html

Vertikalschnitte Vertikale Schnitte durch Modellfelder sind nützlich, um z.B. Austauschprozesse besser zu verstehen, oder um einen schnellen Überblick über die globale Verteilung von Variablen (Temperatur, Spurengaskonzentrationen etc.) zu bekommen. Wir beginnen mit dem (gewünschten) Ergebnis und erläutern dann schrittweise den hierfür erstellten Code. Dieser enthält eine Menge an matplotlib Kniffen und mag daher als Fundgrube zur Lösung eigener Probleme dienen.

Vertical Cross Sections Code zur Erzeugung von Vertikalschnitten Beginnen wir mit dem Hauptprogramm. Es besteht im Wesentlichen aus zwei Funktionsaufrufen: getZMData zum Einlesen der Daten (aus einer netCDF Datei), und plotZM zur Darstellung des Vertikalschnitts. Zuvor wird der Dateiname spezifiziert und dazwischen wird ein Dictionary mit diversen Plot-Optionen definiert. Der Code funktioniert auch ohne Übergabe des plotOpt dictionaries, allerdings sieht der Plot dann nicht so schön aus. Man beachte: während die getZMData Routine dafür ausgelegt ist, zonale Mittelwerte zurückzugeben (also Mittelwerte über alle longitudes), kann plotZM auch zur Anzeige einzelner Schnitte (allerdings immer mit Latitude als x Achse) benutzt werden. Die surfacePressure Option ist vor allem für diesen Fall vorgesehen. Code adapted from http://matplotlib.org/examples/pylab_examples/boxplot_demo2.html

Vertical Cross Sections Modulimport und Einlesen der Daten ACHTUNG: Modell-abhängig! Bedingte Indizierung Code adapted from http://matplotlib.org/examples/pylab_examples/boxplot_demo2.html

Vertical Cross Sections Darstellung des Zonalschnittes Code adapted from http://matplotlib.org/examples/pylab_examples/boxplot_demo2.html Es kann gar nicht oft genug betont werden, wie wichtig eine gute (aber nicht zu ausführliche) Dokumentation ist!

Vertical Cross Sections Wir beginnen mit ein paar Basisdingen: setze plotOpt auf ein leeres dictionary, falls keine Optionen übergeben wurden (das erlaubt den Zugriff auf Elemente via get-Methode) definiere Konstanten (hier nur labelFontSize) erzeuge eine figure und das erste Koordinatensystem (ax1), in welches geplottet wird skaliere die Daten (lege eine Kopie an, damit die Ursprungsdaten nicht überschrieben werden) Code adapted from http://matplotlib.org/examples/pylab_examples/boxplot_demo2.html

Vertical Cross Sections Das war schon der Hauptteil des eigentlichen Konturplots. Beachte folgendes: das Auslesen der Kontur-Intervalle aus plotOpt erfolgt mit der get-Methode. Wurde in plotOpt kein levels key definiert, wird der Default (20 linear ansteigende Intervalle zwischen min und max) benutzt. die Kontur-Intervalle müssen „vernünftig“ den Farben der Farbtabelle zugeordnet werden. Dies geschieht hier mit der BoundaryNorm, die am flexibelsten ist. die fill_between Methode wird benutzt, um die Region unterhalb des Bodendrucks auszublenden dem colorbar wird ein label hinzugefügt und die tick labels des colorbars werden auf die definierte Fontgröße gesetzt Code adapted from http://matplotlib.org/examples/pylab_examples/boxplot_demo2.html

Vertical Cross Sections Die Formatierung der linken y Achse ist noch relativ einfach. Wir benutzen einen LogLocator, um die tick labels festzulegen und verwenden dabei das subs keyword, um eine feinere Einteilung als Dekaden zu bekommen. Je nach Wertebereich (siehe topLevel keyword bei getZMData) werden mal mehr, mal weniger subs eingefügt. Als Zahlenformatierung der pressure tick labels wählen wir %g. Dies schaltet automatisch auf Exponentialdarstellung um, wenn die Werte zu groß oder zu klein werden. Code adapted from http://matplotlib.org/examples/pylab_examples/boxplot_demo2.html

Vertical Cross Sections Nun beginnen wir mit der rechten Seite. Hier wollen wir optional ein kleines Nebenpanel anlegen, welches die Modellschichten anzeigt, falls das modelLevels keyword eien Liste von Druckwerten enthält. Dementsprechend werden die altitude tick labels entweder an der zweiten y Achse des Hauptplots (ax2), oder an dem Zusatzplot (axm) angezeigt. Zunächst berechnen wir jedoch die Höhen der Modelschichten aus den Druckwerten und erzeugen eine Zwillingsachse (ax2). Sodann folgt ein bisschen Formatierung der x Achsenticks (Latitude). Beachte, dass hier ax1.xaxis… stehen muss und diese Anweisungen nach dem twinx() Befehl auftauchen sollten – ansonsten geht es womöglich schief. Code adapted from http://matplotlib.org/examples/pylab_examples/boxplot_demo2.html

Vertical Cross Sections Zur Verschiebung der Achsenbeschriftung Hier erfolgt nun das Zeichnen der horizontalen Linien für die Modellschichten, falls gewünscht. Mittels fig.add_axes erzeugen wir ein weiteres Achsensystem, welches über sharey mit der (rechten) y Achse unseres Hauptsystems verbunden ist. Dadurch kann man den Plot später interaktiv zoomen und verschieben und der Konturplot ändert sich synchron mit der Anzeige der Modellschichten. Wenn wir das Zusatzpanel anzeigen, schalten wir dessen x Achse auf unsichtbar und löschen die tick labels des ax2 Koordinatensystems. Die Ticklinien bleiben jedoch stehen (deshalb nicht einfach ax2.yaxis.set_visible(False)). Code adapted from http://matplotlib.org/examples/pylab_examples/boxplot_demo2.html

Vertical Cross Sections Schließlich verwenden wir den soeben definierten Alias für die rechte Achse (axr), um die Formatierung der „Altitude“ Achse festzulegen: mit dem MaxNLocator erzeugen wir im Allgemeinen sinnvoll gestaffelte tick labels yaxis.tick_right() zwingt die tick labels auf die rechte Seite (das wäre zwar bei ax2 der default, bei axm aber nicht) Auch bei der rechten Achse werden die tick labels wieder auf die gewünschte Fontgröße gesetzt Der vollständige Code steht unter ftp://sv02.meteo.uni-bonn.de/pub/maschu/python/codes/plot_vertical_cross_section.py Code adapted from http://matplotlib.org/examples/pylab_examples/boxplot_demo2.html

THE END Weitere Themen für die Zukunft: Interpolation Farb-Management Grafische Benutzeroberflächen Wissenschaftliche Datenauswertung …

Bonus-Material Wenigstens ein bisschen was zur Interpolation – ohne große Worte…