1 6. Vorlesung. 1.1 Matplotlib: Graphische Darstellung, Methode der kleinsten Quadrate. Ein kleines Beispiel

Ähnliche Dokumente
2D - Plotten / Visualisierung

6 Graphische Darstellungen mit Matplotlib

Computergrafik 2: Übung 1. Eclipse, PyDev, NumPy, Matplotlib

Computergestützte Datenauswertung

file:///home/fran/tmp/matze/dkfz/projects/python-lecture_tmp/lecture09/lecture09.html?print-pdf 1 of :27

import matplotlib.pyplot as plt from numpy import sin, exp, linspace, arange, pi macht das Gleiche wie

6 Ein- und Ausgabe. Bisher war unsere (Bildschirm-) Ausgabe leichtflüchtig (

# # Daten aus einem csv-file einlesen # readerout = reader(open("daten.csv","rb"),delimiter=',');

SciPy Tuebix June 18, 2015

Einführung in QtiPlot

Graphische Benutzeroberflächen mit Matlab

10 Lesen und Schreiben von Dateien

Tutorium zur Makroökonomik

Programmierung in Python

Einführung in QtiPlot

DOS-Sympas Scope Dateien in Excel einlesen

Einführung in Python Teil I Grundlagen

Wie schwer ist ein kosmisches Teilchen?

MATLAB. Eingabe und Ausgabe

L A T E X-Kurs. Teil 4 - Datenanalyse - Qti Plot. Fachschaft Physik Uni Konstanz WS 2015/16

Einführung in. Pierre Bayerl

Kurzeinführung in GNUPLOT

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Programmieren in Java

Daniel S. Steingrube Institut für Quantenoptik Leibniz Universität Hannover.

1 Starten und Installation von gnuplot

4 Schleifen und Dateien

Explizite Cursor. Cursor. Steuerung des expliziten Cursors. Explizite Cursor Funktionen

Datei-Verarbeitung. Peter Sobe 60

DV Anwendungen WS 2013/14

Programmieren mit Python

STATA II: Daten- und Analysevorbereitung (Teil 1)

Prozedurale Datenbank- Anwendungsprogrammierung

Schreibweise in IGOR: 6.02E-23

FLEXIMPORT. Vollständig: Name ItemNr EAN Fedas HG UG Farbe Größe Brand EK VK Menge

Programmieren in Python

MatLab Teil 2: weitere Operationen, Dateien und Bildformate

Anwendung von Geoinformatik: Entwicklung von Open Source Tools für die automatisierte Analyse von Geoinformationen

Konfiguration JAVA Applet zur uneingeschränkten Nutzung der Videofunktion in einem Browser. Video-Streamer FBI

Tipps zur graphischen Auswertung von Praktikumsergebnissen

Handbuch für die Erweiterbarkeit

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Über Kurven, Anfangswertaufgaben und Numerik

Informatik I. Informatik I. 6.1 Programme. 6.2 Programme schreiben. 6.3 Programme starten. 6.4 Programme entwickeln. 6.1 Programme.

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Aufgabe 2: Anzahl Erdbeben als Funktion der Zeit

Studentische Lösung zum Übungsblatt Nr. 7

Wima 1 - Praktikum (Woche 4)

Dateizugriff unter C

QGIS Plugins mit Python programmieren

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany Stammbaum. Stammbaum. Stammbaum

JAVA-Datentypen und deren Wertebereich

DHBW Karlsruhe, Vorlesung Programmieren, Events Musterlösung

MATLAB. Eingabe und Ausgabe

RASPBERRY PI - EINSATZMÖGLICHKEITEN EINES LOW BUDGET COMPUTERS

entweder: zeilenweise fgets() oder: zeichenweise fgetc()

Arbeitsblatt 5 EAD II NetBeans

Inhaltsverzeichnis Einleitung xi Kapitel 1: Die Vorbereitung aufs Abenteuer

Python Tutorial. Geschrieben am Von Sebastian Schäfer 0 EINLEITUNG EINFÜHRUNG Python...

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Diagramme erstellen mit pgfplots

Software und Visualisierungen. Erich Schubert, Dr. Arthur Zimek X-XX KDD Übung

Java Einführung Methoden. Kapitel 6

3a Open BIM Workflow - Import und Weiterbearbeitung

Praktikum Modellreduktion für partielle Differentialgleichungen

Formale Methoden der Ökonomik: Einführung in die empirische Wirtschaftsforschung

Xojo für FileMaker Entwickler

MAXIMUM2.STR Struktogramme. Aufgabe: 3 Zahlen eingeben, größte Zahl ermitteln und ausgeben.

Frankfurt am Main. Dortmund. Stuttgart. Düsseldorf

Projekt: Python Programmierung

Michael Weigend. Python GE-PACKT

Ein gutes Bild sagt mehr als tausend Worte

von Anja Austermann Drag and Drop

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

Gebrauchsanleitung Software TitroLine-Chart

Effizientes Erstellen schöner Plots - keine Hexerei

Programmierung I Einführung in Python, Beyond the Basics

ffl RENAME Λ Doppelklick auf Reihe1 Λ title Λ neuen Namen eingeben, z.b. Zins1 Λ r Reihe2 Zins2 ffl DELETE Λ Einfachklick aufzins1 Λ delete Λ d zins2

Einführung in die Computerlinguistik Einführung in Python (2)

ROOT. Schaltungstechnik. Michael Ritzert Vorlesung Tools Heidelberg

Java Cheatsheet. Mehrzeiliger Kommentar (beginnt mit /* und endet mit */)

Skripte. Beispiel. M. Fyta Computergrundlagen 73/93

Lösungsvorschlag für Übungsblatt 4 Software Engineering 1 (WS 2012/13)

Objekte nutzen und testen. Dienstag, 8. Mai: keine Vorlesung! Konzepte (Wiederholung vom Freitag) Vgl. Kapitel 5-6 im BlueJ-Buch.

Modul 122 VBA Scribt.docx

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung.

Übung zur Vorlesung Multimedia im Netz

Programmierkurs Python

Netzwerksicherheit Musterlösung Übungsblatt 4: Viren

Browser Grid Funktionalitäten

Computergraphik I. Scan Conversion: Lines & Co. Einordnung in die Pipeline. G. Zachmann Clausthal University, Germany zach@tu-clausthal.

Primitive Datentypen

Computergrundkenntnisse und Programmieren, WS 11/12, Übung 7: Grafik

Export-/Importanleitung für Citavi und EndNote

MSI SIM Editor Benutzerhandbuch. MSI SIM Editor Benutzerhandbuch

Suchen in Listen und Hashtabellen

Das KB-128 POS KEYBOARD. Benutzerhandbuch. Version 2.2.1NP

Installationsanleitung Tivoli Storage Manager für Linux

GI Vektoren

Installationshilfe für Adobe Digital Editions 3.0 und 4.0

Transkript:

#!/usr/bin/env python3 # -*- coding: utf-8 -*- #Created on Tue Nov 14 14:22:01 2017 # #@author: christianehelzel 1 6. Vorlesung 1.1 Matplotlib: Graphische Darstellung, Methode der kleinsten Quadrate Ein kleines Beispiel import numpy as np import matplotlib.pyplot as plt def f(t): return t**2*np.exp(-t**2) t = np.linspace(0,3,201) y = f(t) # mit plt.figure() neues Plotfenster öffnen fig = plt.figure() plt.plot(t,y) plt.xlabel( t ) #Achsenbeschriftung plt.ylabel( f(t) ) plt.axis([0, 3, -5,]) plt.title( Matplotlib Demo ) # Achsenangabe # Bildüberschrift fig.savefig( bild1.pdf ) # speichere Bild als pdf-file # fig.savefig( bild1.png ) # speichere Bild als png-file 1

Matplotlib Demo f(t) 0.5 0.3 0.1 0.5 1.0 1.5 2.0 2.5 3.0 t 2 Kurven in einem Plot import numpy as np import matplotlib.pyplot as plt def f1(t): return t**2*np.exp(-t**2) def f2(t): return t**2*f1(t) t1 = np.linspace(0,3,201) t2 = np.linspace(0,3,51) y1 = f1(t1) y2 = f2(t2) plt.figure() plt.plot(t1,y1, r- ) plt.plot(t2,y2, bo ) plt.title( 2 Kurven in einem Plot ) #LaTeX geht auch plt.legend([ tˆ2 exp(-tˆ2), $tˆ4 \exp(-tˆ2)$ ]) <matplotlib.legend.legend at 0x7fdd945bf908> 2

0.5 2 Kurven in einem Plot t^2 exp(-t^2) t 4 exp( t 2 ) 0.3 0.1 0.5 1.0 1.5 2.0 2.5 3.0 2 separate Plots plt.figure() # neues Plotfenster (sonst wäre das im selben wie oben) #subplot: 2 Reihen, eine Spalte, erster Plot plt.subplot(2, 1, 1) t1 = np.linspace(0, 3, 201) t2 = np.linspace(0, 3, 51) y1 = f1(t1) y2 = f2(t2) plt.plot(t1, y1, r-, t2, y2, bo ) plt.xlabel( t ) plt.ylabel( y ) plt.axis([t[0], t[-1], min(y2)-5, max(y2)+0.5]) plt.legend([ $tˆ2 \exp(-tˆ2)$, tˆ4 \exp(-tˆ2) ]) plt.title( Top figure ) #subplot: 2 Reihen, eine Spalte, zweiter Plot plt.subplot(2, 1, 2) t3 = t2[::4] y3 = f2(t3) plt.plot(t1, y1, b-, t3, y3, ys ) plt.xlabel( t ) plt.ylabel( y ) plt.axis([0, 4, -, ]) plt.legend([ $tˆ2 \exp(-tˆ2)$, $tˆ4 \exp(-tˆ2)$ ]) plt.title( Bottom figure ) Text(0.5,1, Bottom figure ) 3

y 1.0 0.5 Top figure t 2 exp( t 2 ) t^4 \exp(-t^2) y 0.5 1.0 Bottom 1.5figure 2.0 2.5 3.0 t t 2 exp( t 2 ) t 4 exp( t 2 ) 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 t 4 plots in one figure plt.figure() # make separate figure plt.subplot(2, 2, 1) t1 = np.linspace(0, 3, 201) t2 = np.linspace(0, 3, 51) y1 = f1(t1) y2 = f2(t2) plt.plot(t1, y1, r-, t2, y2, bˆ ) plt.xlabel( t ) plt.ylabel( y ) plt.axis([t[0], t[-1], min(y2)-5, max(y2)+0.5]) plt.legend([ $tˆ2 \exp(-tˆ2)$, $tˆ4 \exp(-tˆ2)$ ]) plt.title( Top left figure ) plt.subplot(2, 2, 2) t3 = t2[::2] y3 = f2(t3) plt.plot(t1, y1, k--, t3, y3, ys ) plt.xlabel( t ) plt.ylabel( y ) plt.axis([0, 4, -, ]) plt.legend([ $tˆ2 \exp(-tˆ2)$, $tˆ4 \exp(-tˆ2)$ ]) plt.title( Top right figure ) plt.subplot(2, 2, 3) t3 = t2[::3] y3 = f2(t3) 4

plt.plot(t1, y1, b-., t3, y3, gh ) plt.xlabel( t ) plt.ylabel( y ) plt.axis([0, 4, -, ]) plt.legend([ $tˆ2 \exp(-tˆ2)$, $tˆ4 \exp(-tˆ2)$ ]) plt.title( Bottom left figure ) plt.subplot(2, 2, 4) t3 = t2[::4] y3 = f2(t3) plt.plot(t1, y1, b:, t3, y3, mh ) plt.xlabel( t ) plt.ylabel( y ) plt.axis([0, 4, -, ]) plt.legend([ $tˆ2 \exp(-tˆ2)$, $tˆ4 \exp(-tˆ2)$ ]) plt.title( Bottom right figure ) Text(0.5,1, Bottom right figure ) y 1.0 0.5 Top left figure t 2 exp( t 2 ) t 4 exp( t 2 ) y Top right figure t 2 exp( t 2 ) t 4 exp( t 2 ) y Bottom left figure 0 1 2 3 t t 2 exp( t 2 ) t 4 exp( t 2 ) y Bottom right figure 0 1 2 3 4 t t 2 exp( t 2 ) t 4 exp( t 2 ) 0 1 2 3 4 t 0 1 2 3 4 t Mehr Infos (wie zu jedem Befehl): help(plt.plot) logarithmische Achsen x = np.linspace(1,10,10) y = 2**(-x) plt.figure() #plt.plot(x,y, r+ ) plt.semilogy(x,y, + ) plt.show() 5

10 1 10 2 10 3 2 4 6 8 10 1.2 stückweise stetige Funktionen Heaviside Funktion def H(x): return (0 if x < 0 else 1) import numpy as np import matplotlib.pyplot as plt x = np.linspace(-10,10,5) #y=h(x) # liefert Fehlermeldung #plt.plot(x,y) Grund der Fehlermeldung: x<0 liefert ein Array mit logischen Werten, if-test benötigt skalaren boolischen Wert 1. Lösungsmöglichkeit: verwende loop (geht jetzt aber nicht mehr mit floats oä, da len(x) nicht geht)) def H_loop(x): r = np.zeros(len(x)) for i in np.arange(len(x)): r[i] = H(x[i]) return r x = np.linspace(-10,10,50) y = H_loop(x) 6

plt.figure() plt.plot(x,y) [<matplotlib.lines.line2d at 0x7fdd94666710>] 1.0 0.8 1 7.5 5.0 2.5 2.5 5.0 7.5 1 2. Lösungsansatz: automatische Vektorisierung H_vec = np.vectorize(h) x = np.linspace(-10,10,5) y = H_vec(x) plt.figure() plt.plot(x,y) [<matplotlib.lines.line2d at 0x7fdd93e84c88>] 7

1.0 0.8 1 7.5 5.0 2.5 2.5 5.0 7.5 1 3. Lösungsansatz: Vermische logische Werte mit Gleitkommazahl in Rechnung def H(x): return x>=0 x = np.linspace(-10,10,5) y = 1.*H(x) plt.plot(x,y) [<matplotlib.lines.line2d at 0x7fdd93ce5780>] 8

1.0 0.8 1 7.5 5.0 2.5 2.5 5.0 7.5 1 4. Lösungsansatz: manuelle Vektorisierung def Hv(x): r = np.zeros(len(x),dtype=np.int) r[x>=0]=1 return r x = np.linspace(-10,10,5) y = Hv(x) plt.plot(x,y) [<matplotlib.lines.line2d at 0x7fdd93c45d30>] 9

1.0 0.8 1 7.5 5.0 2.5 2.5 5.0 7.5 1 Siehe hierzu auch die hat -Datei in den Vorlesungsunterlagen 1.3 Methode der kleinsten Quadrate - least square fit import numpy as np import matplotlib.pyplot as plt import numpy.linalg as npl Erzeuge Datenpunkte f = np.poly1d([5, 1]) x = np.linspace(0, 10, 5) y = f(x) + 6*np.random.normal(size=len(x)) print(x,y) [ 0. 2.5 5. 7.5 10. ] [ 5.97168208 12.38857487 32.80384027 32.62275238 52.19467106] Zeichne Daten plt.figure() plt.plot(x, y, or ) plt.show() A = np.vstack([x, np.ones(len(x))]).t # np.dot(np.linalg.inv(np.dot(a.t, a)), np.dot(a.t, y)) 10

coeff = npl.solve(a.t@a,a.t@y) lsf = coeff[0]*x+coeff[1] plt.plot(x, y, or,x, lsf) # alternativ: Benutze npl.lstsq [<matplotlib.lines.line2d at 0x7fdd93b92128>, <matplotlib.lines.line2d at 0x7fdd93b922b0>] 11

50 40 30 20 10 0 2 4 6 8 10 50 40 30 20 10 0 2 4 6 8 10 Wir lösen wieder least square Problem. Die Daten werden diesmal aus einer Datei eingelesen import numpy as np import matplotlib.pyplot as plt import numpy.linalg as npl 12

1.4 Einlesen der Daten aus einer Datei Variante 1: Standardpythonstyle x = [] y = [] # Datei öffnen f = open( data.txt ) for line in f.readlines(): #Line ist ein string #Teilt den string bei "whitespace", Rückgabe ist eine Liste mit strings numbers_str = line.split() #strings in floats umwandeln numbers_float = [float(x) for x in numbers_str] #die neuen Werte zu x und y hinzufügen x.append(numbers_float[0]) y.append(numbers_float[1]) #Alternativ: #x.extend([numbers_float[0]]) #y.extend([numbers_float[1]]) #Am Ende die Datei wieder schließen f.close() Unterschied zwischen append und extend : x.append(y) hängt an die Liste x das Objekt y an. Egal was y ist (float oder selbst eine Liste) x.extend(y) hängt an die Liste x die Elemente der Liste y an. y MUSS also eine Liste (bzw tupel) sein. Die Daten sind jetzt in zwei Listen x und y Variante 2: Numpystyle Numpy hat Funktionen zum bequemen Ein- und Auslesen von Daten aus Textdateien x2,y2=np.loadtxt( data.txt,unpack=true) np.loadtxt() läd die Daten (durch whitespace getrennt) in ein(!) array. Die Option unpack teilt dieses array direkt auf, so dass ohne Umwege in x und y gespeichert werden kann. x2 und y2 sind in diesem Fall np.arrays (nicht wie oben Listen) Der Inhalt von x und x2 (bzw. y und y2) ist gleich: print((np.linalg.norm(np.array(x)-x2),np.linalg.norm(np.array(y)-y2))) (, ) Weitere Infos zum Datei Ein- und Auslesen unter https://www.python-kurs.eu/numpy dateien lesen schreiben.php # Zeichne Daten plt.figure() 13

plt.plot(x, y, or ) A = np.vstack([x, np.ones(len(x))]).t coeff = npl.solve(a.t@a,a.t@y) xp = np.linspace(0,10,100) lsf = coeff[0]*xp+coeff[1] plt.plot(xp, lsf, b- ) plt.show() 60 50 40 30 20 10 0 0 2 4 6 8 10 Eine kleine Einführung zu Plots gibt es unter https://www.python-kurs.eu/matplotlib.php oder auf der offiziellen matplotlib Seite: https://matplotlib.org/ 14