Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 5: Plotting, Part 1.

Ähnliche Präsentationen


Präsentation zum Thema: "Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 5: Plotting, Part 1."—  Präsentation transkript:

1 Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 5: Plotting, Part 1

2 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

3 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 (Klick auf den Plot zeigt den zugehörigen Quellcode an) Eine sehr gute Übersicht über die wesentlichen Dinge findet sich auf Für Details siehe auch Setzt numpy voraus Erweiterung basemap zur Kartendarstellung Erweiterung mplot3d für 3D Plots (alpha-Status)

4 Matplotlib Konzept 4 FigureCanvas Renderer Event based on article backend layer Figure Axes Line2D artist layer XAxisYAxisText … x-labelx-ticks … draw Pyplot scripting layer

5 Figure, Axes, etc. 5 figure axes (subplot) (y)axis Text: x i i=0 n figure.text axes.title (x)axis.majorticklabels (x)axis.major_ticks

6 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) 6 from

7 Matplotlib API demo 7 Histogram plot -- Vorbereitung Version 1: Pyplot (MATLAB ähnliche Kommandosprache) Version 2: Nutzung von Artists und FigureCanvas

8 Pyplot: 1-dimensionale Daten 8 MethodFunction errorbarKurve mit Fehlerbalken loglog, semilogx, semilogy Plot mit logarithmischen Achsen plotzeichne Linien und/oder Symbole plot_datezeichne Kurven mit Datums (x) Achse plotfileLese Daten aus Datei und plotte polarPolarplot scatterx,y Scatterplot stepStufenplot errorbarplot_datepolarscatter

9 Pyplot: 2-dimensionale Daten 9 MethodFunction barbsWindsymbole (Richtung und Geschwindigkeit) contour, contourfKonturplot (clabel für Beschriftung) mit Linien bzw. gefüllt hexbinhexagon binning plot hist2d2D Histogramm (ähnlich hexbin) pcolormeshFarbgitter-Plot (auch pcolor) quiver2D Feld von Pfeilen (z.B. Windvektoren) streamlinesStrömungslinien tricontour, tricontourfKonturplot mit Triangulation (Linien bzw. gefüllt) tripcolorFarbfeld mit Triangulation triplotGitterplot mit Triangulation barbs contour hexbin hist2d tricontourftriplot streamlines

10 DER PLOT-BEFEHL UND PLOT-OPTIONEN Darstellung von Zeitreihen 10

11 plt.plot – hatten wir schon mal… 11 siehe PythonWiss01_introductionPythonWiss01_introduction

12 Der plt.plot Befehl 12 x-Werte: meist ein numpy array. Wird nur ein Argument angegeben, dann stehen hier die y-Werte und x wird von 0 bis len(y) gezählt. y-Werte: meist ein numpy array. Farbe und Plotsymbol (marker). Statt dieser Kurzform kann auch marker=x und markerfacecolor=r angegeben werden. Weiter kann eine Verbindungslinie spezifiziert werden (z.B. -). Ein Text für die Legende.

13 Der plt.plot Befehl vollständig (1) 13 Das kann sehr nützlich sein, um die Linieneigenschaften nachträglich zu ändern!

14 Plot line and marker symbols 14 lines Keyword arguments: alpha = 0..1 (opaqueness) linestyle = -, None linewidth = 3. marker = *, None markeredgecolor = k|r|g|b|c|m|y|w|#ffc000, None markeredgewidth = 2. markerfacecolor = k|r|g|b|c|m|y|w|#ffc000, None markersize = 8. for more options, see

15 plt.plot Keywords (1) 15 … (siehe * Beispiel folgt (Info: diese Keywords entsprechen line2D Eigenschaften) KeywordBeschreibung *alphaTransparenz -1 (0 = transparent, 1 = opak) animated{True, False} See Matplotlib/Animationshttp://www.scipy.org/Cookbook/ Matplotlib/Animations *antialiased{True, False} axesReferenz zum Koordinatensystem (siehe OO-Plotting) *clip_boxClip (Abschneiden) am Rand einer gegebenen Bounding Box *clip_onClip (Abschneiden) am Achsenrand {True, False} clip_path{[ (Path, Transform) | Patch | None ]} See clippath_demo.htmlhttp://matplotlib.org/examples/api/ clippath_demo.html *colorFarbe (der Linie) containsFür Event-Handling {callable function} See KeywordBeschreibung *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} figureReferenz zum Panel (siehe OO-Plotting) *fillstyleFüllung der Symbole {full, bottom, left, right, top, none} gid{an id string} irgendeine kryptische Bedeutung… labelBezeichnung der Kurve (siehe legend() ) *linestyleLinienart {-, --, -., :, None,, or same with prepended drawstyle steps--} *linewidthStärke der Linie in Punkten {float}

16 plt.plot Keywords (2) 16 … (siehe KeywordBeschreibung lodLevel of detail {True, False} markerMarkierungssymbol (siehe unten) marker edgecolor Farbe des Symbol-Umrisses (siehe unten) marker edgewidth Linienstärke des Symbolumrisses {float} *marker facecolor Füllfarbe des Symbols (siehe unten) *marker facecoloralt Zweite Füllfarbe des Symbols bei fillstyle== bottom, left, right, top (siehe unten) *markersizeSymbolgröße {float} markevery{None | integer | (startind, stride)} picker{float distance in points or callable pick function fn(artist, event)} pickradius{float distance in points} KeywordBeschreibung rasterizedZeichne 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 *transformKoordinatentransformation (z.B. axes coordinates (0..1) statt Datenkoordinaten) (siehe unten) url{a URL string} ??? visible{True, False} zorderAnordnung (layer) auf der Leinwand. Höhere Werte werden später gezeichnet {int}

17 Plot Optionen - Demo 17 see plot_options_demo.pyplot_options_demo.py clip

18 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

19 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

20 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 ylabel ax.set_xlabel(…) ax.set_ylabel(…) ax.set_title(…) ax.text(…) ax.annotate(…) fig.suptitle(…) fig.text(…)

21 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 normal text group mathtext

22 Anpassung von Plot-Optionen Beispiel: Temperatur-Zeitreihen (Dateien aus Teil 4: meteo_record_bonn-endenich_2011.csv und meteo_record_bonn-endenich_2012.csv)meteo_record_bonn-endenich_2011.csvmeteo_record_bonn-endenich_2012.csv 1.Einfacher Plot 2.Linienstil und Farben, Symbole, Achsenbeschriftungen, formatiertes Datum 3.Text-Kontrolle, mathematischer Text, Überschriften, weitere Plot-Optionen 4.Axes Layout Kontrolle, mehrere Plots (=Axes), gemeinsame Achsen, weitere Textkontrolle 5.Etwas Datenprozessierung, Überlagerung zweier Kurven mit Transparenz, Datumsumwandlung, forcierte Labels, Legende 22

23 23 1. Einfacher Plot Daten einlesen csv2rec: Variablennamen sind immer lowercase (s. Teil 4)

24 24 1. Einfacher Plot Ergebnis Achsen werden automatisch skaliert, x-Achse wird automatisch als Datum beschriftet, Farben werden automatisch gewählt

25 25 2. Linienstil und Farben, Symbole, Achsenbeschriftungen, formatiertes Datum Daten einlesen rote Kreise mit durchgezogener Linie Achsenbeschriftung Definiere Datumsformat (s. Teil 4) Wende Format an

26 26 Ergebnis 2. Linienstil und Farben, Symbole, Achsenbeschriftungen, formatiertes Datum

27 27 3. Text-Kontrolle, mathematischer Text, Überschriften, weitere Plot-Optionen Daten einlesen Font-Eigenschaften Setze Font-Eigenschaften als default Fasse Plot- Optionen in dictionary zusammen Übergebe keywords als dict ein bisschen Mathe-Text

28 3. Text-Kontrolle, mathematischer Text, Überschriften, weitere Plot-Optionen Ergebnis

29 29 4. Axes Layout Kontrolle, mehrere Plots (=Axes), gemeinsame Achsen, weitere Textkontrolle Lese jeweils zwei Temperaturvariablen aus einer Datei

30 30 4. Axes Layout Kontrolle, mehrere Plots (=Axes), gemeinsame Achsen, weitere Textkontrolle pos enthält: x0, y0, x1, y1, width, height rows columns

31 31 4. Axes Layout Kontrolle, mehrere Plots (=Axes), gemeinsame Achsen, weitere Textkontrolle Unicode Grad-Symbol \u00B0 Ausrichten der y-Achsen Beschriftung

32 32 Ergebnis 4. Axes Layout Kontrolle, mehrere Plots (=Axes), gemeinsame Achsen, weitere Textkontrolle

33 33 5. Überlagerung zweier Kurven mit Transparenz, Datumsumwandlung, forcierte Labels, Legende Trick zur Umwandlung von datetime Objekten in Tag im Jahr

34 34 5. Überlagerung zweier Kurven mit Transparenz, Datumsumwandlung, forcierte Labels, Legende Text für Legende 30% Transparenz

35 35 5. Überlagerung zweier Kurven mit Transparenz, Datumsumwandlung, forcierte Labels, Legende Explizite Werte für Ticks und Beschriftung

36 36 Ergebnis 5. Überlagerung zweier Kurven mit Transparenz, Datumsumwandlung, forcierte Labels, Legende

37 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

38 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. bei der Suche nach keyword Optionen etc. EXKURS: Objekt-Orientierte Programmierung

39 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 gibt immer eine Liste von Linienobjekten zurück. Statt lines = ax.plot(…) ; line = lines[0] kommt man durch tuple unpacking mit einem Befehl aus. Siehe auch: EXKURS: Objekt-Orientierte Programmierung

40 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)

41 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

42 Pyplot: 1-dimensionale Daten 42 MethodFunction errorbarKurve mit Fehlerbalken loglog, semilogx, semilogy Plot mit logarithmischen Achsen plotzeichne Linien und/oder Symbole plot_datezeichne Kurven mit Datums (x) Achse plotfileLese Daten aus Datei und plotte polarPolarplot scatterx,y Scatterplot stepStufenplot errorbarplot_datepolarscatter

43 Pyplot: 2-dimensionale Daten 43 MethodFunction barbsWindsymbole (Richtung und Geschwindigkeit) contour, contourfKonturplot (clabel für Beschriftung) mit Linien bzw. gefüllt hexbinhexagon binning plot hist2d2D Histogramm (ähnlich hexbin) pcolormeshFarbgitter-Plot (auch pcolor) quiver2D Feld von Pfeilen (z.B. Windvektoren) streamlinesStrömungslinien tricontour, tricontourfKonturplot mit Triangulation (Linien bzw. gefüllt) tripcolorFarbfeld mit Triangulation triplotGitterplot mit Triangulation barbs contour hexbin hist2d tricontourftriplot streamlines

44 Pyplot: Statistische Plots 44 MethodFunction barBalkendiagramm, optional mit Fehlerbalken barhHorizontaler Barplot boxplotBox und Whisker Plot (auch horizontal) histHistogramm pieTortendiagramm bar boxplothistpie

45 Pyplot: Autokorrelation etc. 45 MethodFunction acorrAutokorrelation cohereKohärenzplot csdcross spectral density psdPowerspektrum specgramSpektrogramm xcorrKreuzkorrelation acorr xcorr cohere csd psd specgram

46 Pyplot: Einbettung von Bildern 46 MethodFunction imreadBilddatei einlesen imsaveBild in Datei speichern imshowBild darstellen siehe auch

47 Pyplot: Grafik anzeigen&speichern 47 MethodFunction savefigBild als (png) Datei speichern showBild in einem interaktiven Fenster anzeigen Interaktive Grafik nach show()

48 Pyplot: Beschriftung, Titel 48 MethodFunction annotateText und Pfeil colorbarFarbbalken zeichnen figlegendLegende für eine Figure (siehe legend) figtextText der Figure hinzufügen (siehe text) legendLegende (für Axes) suptitleÜberschrift für die Figure textText (in ein Axes Objekt) titleTitel eines Axes Objekts annotate

49 Pyplot: Grafische Elemente 49 MethodFunction arrowPfeil axhline, axvlinehorizontale/vertikale Linie über die gesamte Breite/Höhe axhspan, axvspanRechteck über die gesamte Breite/Höhe fillZeichne gefüllte Polygone fill_between, fill_betweenx Fülle Zwischenraum zwischen zwei Kurven hlines, vlinesHorizontale und vertikale Linien rgrid, thetagridsRadiale Gitterlinien für einen Polarplot und deren Position vlines axvline axvspan axhspan axhline hlines fill_between

50 Pyplot: Achsenkontrolle 50 MethodFunction autoscaleBerechne Skalierung der Achsen axisLese oder setze Achseneigenschaften boxRahmen um Achsen an oder ausschalten gridSchalte Achsengitter an oder aus locator_params, tick_params Achsen-Ticks Eigenschaften minorticks_off, minorticks_on Schalte Achsen-Subticks aus/an ticklabel_formatFormatiere Achsenbeschriftung twinx, twinyZweite x bzw y Achse xlabel, ylabelAchsenbeschriftungen xlim, ylimAchsen-Wertebereich xscale, yscalelineare bzw. logarithmische Skalierung xticks, yticksTickpositionen und Label

51 Pyplot: Farbtabellen etc. 51 MethodFunction autumn, bone, cool, copper, flag, gray, hot, hsv, jet, pink, prism, spectral, spring, summer, winter Wahl der entsprechenden Farbtabelle climSetze Farbgrenzen für Bilder set_cmapSetze Farbtabelle

52 Pyplot: Figure und Axes Kontrolle 52 MethodFunction axesFüge Axes Objekt zur Figure hinzu cla, clfLösche aktuelle Axes bzw. Figure delaxesLösche ein Axes Objekt aus der Figure figureErstelle neues Figure Objekt gca, gcf, gciLiefere aktuelle Axes, Figure, bzw. Bild (colorable artist) marginRänder (um Axes) einstellen scaSetze eine Axes als aktuelle subplotErzeuge eine neue Axes und ordne sie auf der Figure an subplotsErzeuge rows*columns Achsensysteme (optional mit geteilten Achsen)

53 Pyplot: Sonstiges 53 MethodFunction get_plot_commandsListe der verfügbaren Plot Befehle (quasi Online-Hilfe) rc, rcdefaultsSetze Default-Einstellungen (nützlich z.B. zur Wahl der Schriftart) setpSetze Artist Eigenschaften

54 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


Herunterladen ppt "Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 5: Plotting, Part 1."

Ähnliche Präsentationen


Google-Anzeigen