2D - Plotten / Visualisierung - TU Dresdenknoll/python/material/SommerkursPython_pdfs... ·...
Transcript of 2D - Plotten / Visualisierung - TU Dresdenknoll/python/material/SommerkursPython_pdfs... ·...
![Page 1: 2D - Plotten / Visualisierung - TU Dresdenknoll/python/material/SommerkursPython_pdfs... · Fakultät Maschinenwesen Institut für Verarbeitungsmaschinen und mobile Arbeitsmaschinen](https://reader030.fdokument.com/reader030/viewer/2022040417/5d523f6388c99360408b4a14/html5/thumbnails/1.jpg)
Fakultät Maschinenwesen Institut für Verarbeitungsmaschinen und mobile Arbeitsmaschinen
2D - Plotten / Visualisierung
06.06.2011 Sebastian Voigt
mit numpy und matplotlib
![Page 2: 2D - Plotten / Visualisierung - TU Dresdenknoll/python/material/SommerkursPython_pdfs... · Fakultät Maschinenwesen Institut für Verarbeitungsmaschinen und mobile Arbeitsmaschinen](https://reader030.fdokument.com/reader030/viewer/2022040417/5d523f6388c99360408b4a14/html5/thumbnails/2.jpg)
Wie was wo warum?
• Visualisierung von Messdaten, Simulationsergebnissen etc.• Publikationsfertige Grafiken für Studien- und Diplomarbeiten,
Dissertationen wissenschaftliche Artikel und Beiträge
TU Dresden, 06.06.2011 Präsentationsname XYZ Folie 2 von XYZ
![Page 3: 2D - Plotten / Visualisierung - TU Dresdenknoll/python/material/SommerkursPython_pdfs... · Fakultät Maschinenwesen Institut für Verarbeitungsmaschinen und mobile Arbeitsmaschinen](https://reader030.fdokument.com/reader030/viewer/2022040417/5d523f6388c99360408b4a14/html5/thumbnails/3.jpg)
Python Pakete für Visualisierung allg.
zahlreiche Pakete, die (nicht nur 2D) Plotfunktionalitäten bereitstellen:
• gnuplot-py – GnuPlot interface• Chaco – schnelle 2D-lib von Enthought• PyQwt – Plotwidgets für Qt
• Mayavi
• Vtk• …
Übersicht: http://wiki.python.org/moin/NumericAndScientific/Plotting
TU Dresden, 06.06.2011 Präsentationsname XYZ Folie 3 von XYZ
![Page 4: 2D - Plotten / Visualisierung - TU Dresdenknoll/python/material/SommerkursPython_pdfs... · Fakultät Maschinenwesen Institut für Verarbeitungsmaschinen und mobile Arbeitsmaschinen](https://reader030.fdokument.com/reader030/viewer/2022040417/5d523f6388c99360408b4a14/html5/thumbnails/4.jpg)
Quasi-Standard für 2D
numpy – numeric python• Grundlage für nahezu alle Pakete, die irgendwie numerisch rechnen• Kern: n-dimensionale Array-Klasse• Lineare Algebra …
vertiefende Veranstaltung im Pythonkurs
http://numpy.scipy.org/
TU Dresden, 06.06.2011 Präsentationsname XYZ Folie 4 von XYZ
matplotlib• Quasi-Standard für 2D-Plotten mit Python• Syntax an Matlab angelehnt einfach für Umsteiger• Sehr umfangreiche Plotfunktionen• Qualitativ hochwertige Ergebnisse• Gute Doku
http://matplotlib.sourceforge.net/
![Page 5: 2D - Plotten / Visualisierung - TU Dresdenknoll/python/material/SommerkursPython_pdfs... · Fakultät Maschinenwesen Institut für Verarbeitungsmaschinen und mobile Arbeitsmaschinen](https://reader030.fdokument.com/reader030/viewer/2022040417/5d523f6388c99360408b4a14/html5/thumbnails/5.jpg)
Einführung numpy
Tutorial zum Nachlesen: http://www.scipy.org/Tentative_NumPy_Tutorial
Und los geht‘s:
>>> from numpy import *
>>> a = array( (1,2,3) )>>> aarray([1,2,3])
>>> b = array( ((1,2,3),(2,3,4)) )>>> barray([[1,2,3],
[3,4,5]])
TU Dresden, 06.06.2011 Präsentationsname XYZ Folie 5 von XYZ
![Page 6: 2D - Plotten / Visualisierung - TU Dresdenknoll/python/material/SommerkursPython_pdfs... · Fakultät Maschinenwesen Institut für Verarbeitungsmaschinen und mobile Arbeitsmaschinen](https://reader030.fdokument.com/reader030/viewer/2022040417/5d523f6388c99360408b4a14/html5/thumbnails/6.jpg)
Einführung numpy
Weitere Möglichkeiten, Arrays zu generieren:
>>> linspace(0,1,6)array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. ])
>>> arange(0,10,1)array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Spezielle Arrays / Matrizen:
>>> zeros((2,3))>>> ones((2,3))>>> diag((1,2,3))>>> eye(3)
TU Dresden, 06.06.2011 Präsentationsname XYZ Folie 6 von XYZ
![Page 7: 2D - Plotten / Visualisierung - TU Dresdenknoll/python/material/SommerkursPython_pdfs... · Fakultät Maschinenwesen Institut für Verarbeitungsmaschinen und mobile Arbeitsmaschinen](https://reader030.fdokument.com/reader030/viewer/2022040417/5d523f6388c99360408b4a14/html5/thumbnails/7.jpg)
Rechnen mit arrays
Alle Operationen werden elementweise ausgeführt!
>>> 2*aarray([2, 4, 6])>>> sin(a)array([ 0.84147098, 0.90929743, 0.14112001])>>> abs(-a)array([1, 2, 3])
Länge eines Vektors, „echte“ Matrix-Multiplikation:
>>> from numpy.linalg import norm>>> norm(a)3.7416573867739413>>> dot(a,a)14
TU Dresden, 06.06.2011 Präsentationsname XYZ Folie 7 von XYZ
![Page 8: 2D - Plotten / Visualisierung - TU Dresdenknoll/python/material/SommerkursPython_pdfs... · Fakultät Maschinenwesen Institut für Verarbeitungsmaschinen und mobile Arbeitsmaschinen](https://reader030.fdokument.com/reader030/viewer/2022040417/5d523f6388c99360408b4a14/html5/thumbnails/8.jpg)
Stapeln
Zusammenfügen von Arrays:
>>> hstack((a,a))array([1, 2, 3, 1, 2, 3])
>>> vstack((a,b))array([[1, 2, 3],
[1, 2, 3],[2, 3, 4]])
>>> hstack((a, b.flatten()))array([1, 2, 3, 1, 2, 3, 2, 3, 4])
TU Dresden, 06.06.2011 Präsentationsname XYZ Folie 8 von XYZ
![Page 9: 2D - Plotten / Visualisierung - TU Dresdenknoll/python/material/SommerkursPython_pdfs... · Fakultät Maschinenwesen Institut für Verarbeitungsmaschinen und mobile Arbeitsmaschinen](https://reader030.fdokument.com/reader030/viewer/2022040417/5d523f6388c99360408b4a14/html5/thumbnails/9.jpg)
Slicing
Wie komme ich an die Werte im Array ran?
grundsätzlich: a[start:stop:step]
>>> a[0] einzelnes Element1
>>> a[0:1] Bereich aus dem Arrayarray([1])>>> a[0:2]array([1,2])
>>> a[::-1] kehrt Reihenfolge umarray([3,2,1])
>>> b[:,0] alle Werte der ersten Spaltearray([1,2])
>>> b[0,1] äquivalent zu b[0][1]2
TU Dresden, 06.06.2011 Präsentationsname XYZ Folie 9 von XYZ
![Page 10: 2D - Plotten / Visualisierung - TU Dresdenknoll/python/material/SommerkursPython_pdfs... · Fakultät Maschinenwesen Institut für Verarbeitungsmaschinen und mobile Arbeitsmaschinen](https://reader030.fdokument.com/reader030/viewer/2022040417/5d523f6388c99360408b4a14/html5/thumbnails/10.jpg)
Matplotlib - Einstieg
Zwei Möglichkeiten der Verwendung:
(1) interaktiv in der Konsole (pylab)(2) objektorientiert in Skripten und Anwendungen (pyplot)
TU Dresden, 06.06.2011 Präsentationsname XYZ Folie 10 von XYZ
Einführungsbeispiel
from matplotlib.pylab import *
x = linspace(0,6.28,100)y = sin(x)
plot(x,y)show()
![Page 11: 2D - Plotten / Visualisierung - TU Dresdenknoll/python/material/SommerkursPython_pdfs... · Fakultät Maschinenwesen Institut für Verarbeitungsmaschinen und mobile Arbeitsmaschinen](https://reader030.fdokument.com/reader030/viewer/2022040417/5d523f6388c99360408b4a14/html5/thumbnails/11.jpg)
Anständiger Plot
Komplettierung mit Beschriftungen, Legende, Hilfslinien, Titel:
from matplotlib.pylab import *
x = linspace(0,6.28,100)y = sin(x)
title('Sinusfunktion')plot(x,y, label='sin(x)')
xlabel('x')ylabel('y')
legend()grid()show()
TU Dresden, 06.06.2011 Präsentationsname XYZ Folie 11 von XYZ
![Page 12: 2D - Plotten / Visualisierung - TU Dresdenknoll/python/material/SommerkursPython_pdfs... · Fakultät Maschinenwesen Institut für Verarbeitungsmaschinen und mobile Arbeitsmaschinen](https://reader030.fdokument.com/reader030/viewer/2022040417/5d523f6388c99360408b4a14/html5/thumbnails/12.jpg)
Objektorientierte Variante
TU Dresden, 06.06.2011 Präsentationsname XYZ Folie 12 von XYZ
Für komplexere Aufgaben wird i.d.R. Skript geschrieben:
import matplotlib.pyplot as pltimport numpy as np
x = np.linspace(0,6.28,100)y = np.sin(x)
fig = plt.figure(figsize=(8,6))ax = fig.add_subplot(1,1,1)
ax.set_title('Sinusfunktion')ax.plot(x,y, label='sin(x)')ax.set_xlabel('x')ax.set_ylabel('y')ax.legend()ax.grid()
plt.show()
![Page 13: 2D - Plotten / Visualisierung - TU Dresdenknoll/python/material/SommerkursPython_pdfs... · Fakultät Maschinenwesen Institut für Verarbeitungsmaschinen und mobile Arbeitsmaschinen](https://reader030.fdokument.com/reader030/viewer/2022040417/5d523f6388c99360408b4a14/html5/thumbnails/13.jpg)
Begriffe
TU Dresden, 06.06.2011 Präsentationsname XYZ Folie 13 von XYZ
figure
axes
gridlines
xticklines
xticks
xticklabels
xlabel
title
legend
xaxis
![Page 14: 2D - Plotten / Visualisierung - TU Dresdenknoll/python/material/SommerkursPython_pdfs... · Fakultät Maschinenwesen Institut für Verarbeitungsmaschinen und mobile Arbeitsmaschinen](https://reader030.fdokument.com/reader030/viewer/2022040417/5d523f6388c99360408b4a14/html5/thumbnails/14.jpg)
Wo bekomme ich Hilfe?
Matplotlib ist sehr umfangreich und komplex Doku unterhttp://matplotlib.sourceforge.net/contents.html
Tipp 1: gallery und von da abgucken
Tipp 2: Dokumentation der Axes-Klassehttp://matplotlib.sourceforge.net/api/axes_api.html?highlight=axessubplot#matplotlib.axes.Axes
Alle Plot- und Zeichenfunktionen sind über die Axes-Klasse zu erreichen!
• plot(), bar(), scatter(), arrow(), …• Besonders wichtig: Keyword-Argumente
Siehe auch Cheatsheet!
TU Dresden, 06.06.2011 Präsentationsname XYZ Folie 14 von XYZ
![Page 15: 2D - Plotten / Visualisierung - TU Dresdenknoll/python/material/SommerkursPython_pdfs... · Fakultät Maschinenwesen Institut für Verarbeitungsmaschinen und mobile Arbeitsmaschinen](https://reader030.fdokument.com/reader030/viewer/2022040417/5d523f6388c99360408b4a14/html5/thumbnails/15.jpg)
Häufig benötigte Einstellungen
ax.set_aspect(‘equal‘) Seitenverhältnis 1:1ax.set_xlim(0,10) Wertebereich der x-Achseax.set_xticklabels([‘a‘,‘b‘]) eigene Beschriftungen
ax.legend(loc=1) Position der Legendeax.tick_params(kwargs**) Optik Achsenbeschriftung
leg = ax.legend(loc=0) Schriftgröße Legendefor t in leg.get_texts():
t.set_fontsize(13)
TU Dresden, 06.06.2011 Präsentationsname XYZ Folie 15 von XYZ
Grundsätzlich auch: setp() ermöglicht das setzten von Eigenschaften von Objektengetp() liefert die Objekte und deren kwargs (Introspection)
![Page 16: 2D - Plotten / Visualisierung - TU Dresdenknoll/python/material/SommerkursPython_pdfs... · Fakultät Maschinenwesen Institut für Verarbeitungsmaschinen und mobile Arbeitsmaschinen](https://reader030.fdokument.com/reader030/viewer/2022040417/5d523f6388c99360408b4a14/html5/thumbnails/16.jpg)
LaTeX und matplotlibrc
• Matplotlib bringt eigenen (reduzierten) LaTeX Compiler mit• Ausprobieren:
• ax.plot(x,y, label='$sin(x)$')• ax.set_ylabel('$\mu_2$')
• Optionen können global in rc gesetzt werden:
import matplotlib as mpl
mpl.rc('font',**{'family':'serif','size':11,'serif':['Computer Modern Roman']})
mpl.rc('text', usetex=True)
Damit werden alle strings mit LaTeX compiliert
TU Dresden, 06.06.2011 Präsentationsname XYZ Folie 16 von XYZ