From 755f45b487e53ea00f79b731af4f4ee52bbe5e7f Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Sat, 14 Nov 2015 00:02:06 +0100 Subject: [PATCH] worked on the plotting chapter --- header.tex | 4 +- plotting/lecture/outlier.py | 36 +++ plotting/lecture/plotting.tex | 396 ++++++++++++++++++--------------- scientificcomputing-script.tex | 6 +- 4 files changed, 254 insertions(+), 188 deletions(-) create mode 100644 plotting/lecture/outlier.py diff --git a/header.tex b/header.tex index 6d15f95..8a6ec5a 100644 --- a/header.tex +++ b/header.tex @@ -8,16 +8,16 @@ % \newcommand{\tr}[2]{#1} % en % \usepackage[english]{babel} \newcommand{\tr}[2]{#2} % de -\usepackage[german]{babel} +\usepackage[ngerman]{babel} %%%% layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage[left=25mm,right=25mm,top=20mm,bottom=30mm]{geometry} -\setcounter{tocdepth}{1} \usepackage{pslatex} % nice font for pdf file %%%%% section style %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage[sf,bf,it,big,clearempty]{titlesec} \setcounter{secnumdepth}{1} +\setcounter{tocdepth}{1} %%%%% units %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage[mediumspace,mediumqspace,Gray]{SIunits} % \ohm, \micro diff --git a/plotting/lecture/outlier.py b/plotting/lecture/outlier.py new file mode 100644 index 0000000..69e8ce7 --- /dev/null +++ b/plotting/lecture/outlier.py @@ -0,0 +1,36 @@ +import numpy as np +import matplotlib.pyplot as plt + +plt.xkcd() +fig = plt.figure( figsize=(5,3) ) + +# the data: +n = 50 +rng = np.random.RandomState(4637281) +x = rng.rand(n)*9.0+0.5 +y = rng.randn(n)*1.0+4.0 + +# plot it: +ax = fig.add_subplot( 1, 1, 1 ) +ax.spines['right'].set_visible(False) +ax.spines['top'].set_visible(False) +ax.yaxis.set_ticks_position('left') +ax.xaxis.set_ticks_position('bottom') +ax.set_xlim(0, 10.0) +ax.set_ylim(0.0, 10.0) +ax.set_xticks( np.arange(0, 11, 2)) +ax.set_yticks( np.arange(0, 11, 2)) +ax.set_xlabel('Time [Days]') +ax.set_ylabel('Mass [kg]') +outlier = (3.3, 8.6) +ax.annotate('Outlier', + xy=(outlier[0]+0.2, outlier[1]), xycoords='data', + xytext=(5.4, 9.5), textcoords='data', ha='left', + arrowprops=dict(arrowstyle="->", relpos=(0.0,0.5), + connectionstyle="angle3,angleA=0,angleB=10") ) +ax.scatter(x, y, s=50, c='b', zorder=5) +ax.scatter(outlier[0], outlier[1], s=80, c='#CC0000', zorder=10) + +plt.tight_layout(); +plt.savefig('outlier.pdf') +#plt.show(); diff --git a/plotting/lecture/plotting.tex b/plotting/lecture/plotting.tex index 9c6954d..ea06574 100644 --- a/plotting/lecture/plotting.tex +++ b/plotting/lecture/plotting.tex @@ -1,11 +1,9 @@ \chapter{\tr{Data plotting}{Graphische Darstellung von Daten}} -\section{Dos and Don'ts bei der graphischen Darstellung von Daten} - Die F\"ahigkeit zur ad\"aquaten Darstellung wissenschaftlicher Daten -darf man durchaus zu den notwendigen Kernkompetenzen z\"ahlen. Wir +darf durchaus zu den notwendigen Kernkompetenzen gez\"ahlt werden. Wir brauchen sie um unsere Daten und Ergebnisse \"uberzeugend darzustellen -und das Verst\"andnis zu vereinfachen +und um das Verst\"andnis zu vereinfachen. \begin{figure}[hb!] \includegraphics[width=0.9\columnwidth]{convincing} @@ -13,62 +11,73 @@ und das Verst\"andnis zu vereinfachen Plots.}{\url{www.xkcd.com}} \label{xkcdplotting} \end{figure} -\subsection{Was soll ein Plot leisten?} -Graphen sollen dem geneigten Leser erm\"oglichen die Daten zu erfassen -und die beschriebenen Effekte zu begutachen, zu hinterfragen und zu -validieren. Eine der obersten Regeln ist die vollst\"andige Annotation -von Plots (Abbildung \ref{xkcdplotting}). Eine weiteres Prinzip, an -das man sich halten sollte, ist die \emph{ink minimization}. Dieses -Prinzip fordert, dass das Verh\"altnis aus Tinte, die f\"ur die -Darstellung der Daten gebraucht wird und der Menge Tinte, die f\"ur -sonstige Elemente der Graphik aufgewendetwird m\"oglichst gro{\ss} -ist. Mit anderen Worten: \"uberfl\"ussige Ausschm\"uckungen sollten -sich in Datenplots nur selten finden lassen. Eine Ausnahme kann -gemacht werden, wenn der Plot z.B in einer Pr\"asentation oder zu -didaktischen Zwecken genutzt wird. - -\subsection{Dinge, die vermieden werden sollten.} +\section{Was macht einen guten Plot aus?} +Graphen sollen dem geneigten Leser erm\"oglichen, die Daten zu +erfassen und die beschriebenen Ergebnisse und Effekte zu begutachen, +zu hinterfragen und zu validieren. + +Eine der obersten Regeln ist die vollst\"andige Annotation von Plots: +Achsenbeschriftung mit Einheiten und Legenden +(\figref{xkcdplotting}). + +Eine weiteres Prinzip f\"ur ansprechende Graphiken ist die \emph{ink + minimization}. Dieses Prinzip fordert, dass das Verh\"altnis aus +Tinte, die f\"ur die Darstellung der Daten gebraucht wird und der +Menge Tinte, die f\"ur sonstige Elemente der Graphik aufgewendetwird +m\"oglichst gro{\ss} ist. Mit anderen Worten: \"uberfl\"ussige +Ausschm\"uckungen sollten sich in Datenplots nur selten finden lassen; +die Daten sollen im Vordergrund stehen. Eine Ausnahme kann gemacht +werden, wenn der Plot z.B in einer Pr\"asentation oder zu didaktischen +Zwecken genutzt wird. + +\begin{important} + Ein Datenplot muss ausreichend beschriftet werden: + \begin{itemize} + \item Alle Achsen m\"ussen eine Bezeichnung und eine Einheit erhalten\\ + (z.B. \code{xlabel('Geschwindigkeit [m/s]'}). + \item Wenn mehrere Dinge in einem Plot dargestellt werden, m\"ussen + diese mit einer Legende oder \"ahnlichem benannt werden + \matlabfun{legend()}. + \item Mehrere Plots mit den gleichen Gr\"o{\ss}en auf den Achsen, + m\"ussen den gleichen Wertebereich auf den Achsen zeigen + (z.B. \code{xlim([0 100])}.\\ + Ausnnahmen sind m\"oglich, sollten aber in der + Abbildungsunterschrift erw\"ahnt werden. + \item Die Beschriftung mu{\ss} gro{\ss} genug sein, um lesbar zu sein. + \end{itemize} +\end{important} + + +\section{Dinge, die vermieden werden sollten.} Bei der Darstellung wissenschaftlicher Daten sollte drauf geachtet werden suggestive oder fehlleitende Darstellungen zu vermeiden. Ablenkung durch \"uberm\"a{\ss}ige Effekte lassen einen Plot unruhig -und unseri\"os wirken. Comicartige Effekte wie z.B. in Abbildung -\ref{comicexamplefig} sind in der Regel nicht zul\"assig. Ausnahme ist -hier allerdings der Einsatz im didaktischen Kontext, wo es um die -Illustration (z.B. einer Methode) geht und kein Anspruch auf -Korrektheit besteht. - -\begin{figure} - \includegraphics[width=0.35\columnwidth]{images/one_d_problem_c} +und unseri\"os wirken (Versto{\ss} gegen das Prinzip \enterm{ink + minimization}). Comicartige Effekte wie z.B. in +\figref{comicexamplefig} sind nicht geeignet um Daten darzustellen. Im +didaktischen Kontext hingegen kann dieser Stil Hilfreich sein, um zu +betonen, dass es sich um illustrative Beispiele handelt bei denen es +nicht auf die genaue Lage der Datenpunkte ankommt. + +\begin{figure}[t] + \includegraphics[width=0.7\columnwidth]{outlier}\vspace{-3ex} \titlecaption{Comicartige Darstellungen}{ sind f\"ur die Darstellung - wissenschaftlicher Daten nicht geeignet.}\label{comicexamplefig} + wissenschaftlicher Daten nicht geeignet. F\"ur illustrative Beispiele + k\"onnen sie aber helfen, die wesentlichen Aspekte zu betonen.}\label{comicexamplefig} \end{figure} Im Folgenden werden einige Beispiele fehlleitender oder suggestiver Darstellungen gezeigt. Einiger dieser Effekte sind deutlich \"uberzeichnet, sie werden aber, etwas dezenter nat\"urlich, mitunter -mit voller Absicht eingesetzt um die Wahrnehmung in die gewollte +mit voller Absicht eingesetzt, um die Wahrnehmung in die gewollte Richtung zu beeinflussen. Auf Wikipedia gibt es weitere Beispiele (\url{https://en.wikipedia.org/wiki/Misleading_graph}). -Durch perspektivische Effekte k\"onnen Gr\"o{\ss}enverh\"altnisse -verzerrt dargestellt werden (z.B. Abbildung -\ref{misleadingpiefig}). Ver\"anderung der Achsenskalierungen kann die -Wahrnehmung des Betrachters in die ein oder andere Richtung -lenken. Ein Zusammenhang kann so verschleiert oder \"ubertrieben -werden (Abbildung \ref{misleadingscalingfig}). Insbesondere wenn die -Gr\"o{\ss}e von Symbolen zur Darstellung einer Quantit\"at eingesetzt -werden, muss man mit Vorsicht vorgehen um Unterschiede nicht -\"uberproportional darzustellen (Abbildung -\ref{misleadingsymbolsfig}). - -\begin{figure} - \begin{minipage}[t]{0.4\textwidth} - \includegraphics[width=\textwidth]{images/misleading_pie} - \end{minipage} - \begin{minipage}[t]{0.4\textwidth} - \includegraphics[width=\textwidth]{images/sample_pie} - \end{minipage} +\begin{figure}[p] + \includegraphics[width=0.35\textwidth]{misleading_pie} + \hspace{0.05\textwidth} + \includegraphics[width=0.35\textwidth]{sample_pie} \titlecaption{Perspektivische Verzerrung beeinflusst die Gr\"o{\ss}enwahrnehmung.}{Durch die Wahl der perspektivischen Darstellung erscheint das hervorgehobene Segment C des @@ -79,15 +88,15 @@ werden, muss man mit Vorsicht vorgehen um Unterschiede nicht \url{https://en.wikipedia.org/wiki/Misleading_graph}}\label{misleadingpiefig} \end{figure} -\begin{figure} +\begin{figure}[p] \begin{minipage}[t]{0.3\textwidth} - \includegraphics[width=0.9\textwidth]{images/line_graph1} + \includegraphics[width=0.9\textwidth]{line_graph1} \end{minipage} \begin{minipage}[t]{0.3\textwidth} - \includegraphics[width=0.9\textwidth]{images/line_graph1_3} + \includegraphics[width=0.9\textwidth]{line_graph1_3} \end{minipage} \begin{minipage}[t]{0.3\textwidth} - \includegraphics[width=0.9\textwidth]{images/line_graph1_4} + \includegraphics[width=0.9\textwidth]{line_graph1_4} \end{minipage} \titlecaption{Die Wahl der Zeichenfl\"ache beeinflusst den visuellen Eindruck.}{Alle drei Plots zeigen die gleichen Daten. Allein die @@ -97,15 +106,15 @@ werden, muss man mit Vorsicht vorgehen um Unterschiede nicht \url{https://en.wikipedia.org/wiki/Misleading_graph}}\label{misleadingscalingfig} \end{figure} -\begin{figure} +\begin{figure}[p] \begin{minipage}[t]{0.3\textwidth} - \includegraphics[width=0.8\textwidth]{images/improperly_scaled_graph} + \includegraphics[width=0.8\textwidth]{improperly_scaled_graph} \end{minipage} \begin{minipage}[t]{0.3\textwidth} - \includegraphics[width=0.8\textwidth]{images/comparison_properly_improperly_graph} + \includegraphics[width=0.8\textwidth]{comparison_properly_improperly_graph} \end{minipage} \begin{minipage}[t]{0.3\textwidth} - \includegraphics[width=0.7\textwidth]{images/properly_scaled_graph} + \includegraphics[width=0.7\textwidth]{properly_scaled_graph} \end{minipage} \titlecaption{Die Skalierung von Symbolen kann problematisch sein.} {In diesen Graphen werden Symbole eingesetzt um Messgr\"o{\ss}en in @@ -120,25 +129,30 @@ werden, muss man mit Vorsicht vorgehen um Unterschiede nicht \url{https://en.wikipedia.org/wiki/Misleading_graph}} \label{misleadingsymbolsfig} \end{figure} -\newpage +Durch perspektivische Effekte k\"onnen Gr\"o{\ss}enverh\"altnisse +verzerrt dargestellt werden (\figref{misleadingpiefig}). Ver\"anderung +der Achsenskalierungen kann die Wahrnehmung des Betrachters in die +eine oder andere Richtung lenken. Ein Zusammenhang kann so +verschleiert oder \"ubertrieben werden +(\figref{misleadingscalingfig}). Insbesondere wenn die Gr\"o{\ss}e +von Symbolen zur Darstellung einer Quantit\"at eingesetzt werden, muss +mit Vorsicht vorgegangen werden, um Unterschiede nicht \"uberproportional +darzustellen (\figref{misleadingsymbolsfig}). \section{Das Plottingsystem von \matlab{}} Plotten in \matlab{} ist zun\"achst einmal einfach. Durch den Aufruf von \code{plot(x, y)} wird ein einfacher, schlichter Linienplot -erstellt. Zun\"achst fehlen diesem Plot jegliche Annotationen wie -Achsbeschriftungen, Legenden, etc. Um diese hizuzuf\"ugen kann man -zwei Wege gehen: Das Graphische User Interface oder die +erstellt. Diesem Plot fehlen jedoch jegliche Annotationen wie +Achsbeschriftungen, Legenden, etc. Es gibt zwei M\"oglichkeiten diese +hinzuzuf\"ugen: (i) das Graphische User Interface oder (ii) die Kommandozeile. Beide haben ihre Berechtigung sowie Vor- und -Nachteile. W\"ahrend es bequem ist, die Abbildung mit der GUI -(Abbildung \ref{ploteditorfig}) zu bearbeiten sind die erhaltenen -Ergebnisse nicht einfach reproduzierbar. Wenn eine Abbildung -korrigiert werden musss, wird es schwierig und zeitaufwendig. Die -nachtr\"agliche Bearbeitung der Abbildungen mit einem beliebigen -Graphikprogramm erscheitn bequem, birgt seine eigenen Risiken und ist -auf lange Sicht sehr aufwendig. Das Bestreben sollte sein, aus -\matlab{} heraus publikationsreife Abbildungen zu erzeugen. +Nachteile. +W\"ahrend es bequem ist, die Abbildung mit der GUI +(\figref{ploteditorfig}) zu bearbeiten sind die erhaltenen Ergebnisse +nicht einfach reproduzierbar oder \"ubertragbar. Wenn eine Abbildung +korrigiert werden musss, wird es schwierig und zeitaufwendig. Plots in \matlab{} bestehen aus mehreren Elementen: \begin{enumerate} @@ -148,17 +162,13 @@ Plots in \matlab{} bestehen aus mehreren Elementen: \item \enterm{Lines}: Die gezeichneten Datenplots wie Linien, Fl\"achen, etc. \item \enterm{Annotations}: Annotationen wie Textboxen oder auch - Pfeil, die zum Hervorheben von Punkten, oder Abschnitten gedacht + Pfeile, die zum Hervorheben von Punkten, oder Abschnitten gedacht sind. -\item \enterm{Legends}: Legenden der Daten plots. +\item \enterm{Legends}: Legenden der Datenplots. \end{enumerate} - Jedes dieser Elemente bietet eine Vielzahl von Einstellungsm\"oglichkeiten. Wie schon erw\"ahnt, k\"onnen diese -\"uber die GUI (Abbildung \ref{ploteditorfig}) bearbeitet werden. Je -nachdem welches der graphischen Elemente (Figure, Axes, etc., s.\,o.) -ausgew\"ahlt wurde ver\"andern sich die Einstellungs\"oglichkeiten in -des Editors. +\"uber die GUI (Abbildung \ref{ploteditorfig}) bearbeitet werden. \begin{figure} \begin{minipage}[t]{0.6\columnwidth} @@ -167,9 +177,9 @@ des Editors. \begin{minipage}[t]{0.3\columnwidth} \includegraphics[width=0.9\textwidth]{property_editor} \end{minipage} - \caption{\textbf{Graphisches Interface: ``Plot Editor''.} \"Uber das Menu + \caption{\textbf{Graphisches Interface ``Plot Editor''.} \"Uber das Menu ``Tools $\rightarrow$ Edit Plot'' erreicht man den Plot Editor. Je nachdem - welches Element des Plots ausgew\"ahlt wurde ver\"andern sich + welches Element des Plots ausgew\"ahlt wurde, ver\"andern sich die Einstellungsm\"oglichkeiten. Weitere Eigenschaften und Einstellungen k\"onnen \"uber den ``Property Editor'', rechts, eingesehen und ver\"andert werden. Der ``Property Editor'' ist @@ -178,11 +188,26 @@ des Editors. \end{figure} Alle Einstellungen, die \"uber das graphische Interface vorgenommen -werden k\"onnen sind auch \"uber Befehle auf der Kommandozeile -m\"oglich. Das hei{\ss}t, dass die Einstellungen problemlos in ein -Skript oder eine Funktion eingebaut werden k\"onnen. Dieser Ansatz hat -den Vorteil, dass man sich die M\"uhe nur einmal machen muss. Die -Abbildungen k\"onnen exakt reprosuziert werden. +werden k\"onnen, sind auch \"uber Befehle auf der Kommandozeile +m\"oglich. Auf diese Weise k\"onnen Einstellungen problemlos in ein +Skript oder eine Funktion eingebaut werden. Dieser Ansatz hat den +gro{\ss}en Vorteil, dass man sich die M\"uhe nur einmal machen +muss. Die Abbildungen k\"onnen exakt reproduziert werden und m\"ussen +nicht mehr neu beschriftet werden, wenn sich die Daten ver\"andert +oder erweitert haben, oder wenn der gleiche Plot von vielen +Datens\"atzen erstellt werden soll. + +\begin{important} + Das nachtr\"agliche Bearbeiten und Beschriften der Abbildungen mit + einem beliebigen Graphikprogramm erscheint auf den ersten Blick + bequem, birgt aber seine eigenen Risiken (z.B. verrutschte Achsen, + verlorengegangene Beschriftungen, etc.) und ist auf lange Sicht sehr + aufwendig, da bei ver\"anderter Datenlage die Graphik nur manuell + reproduzierbar ist. Deshalb sollten publikationsreife Abbildungen immer + vollst\"andig aus \matlab{} heraus erzeugt werden und eine + Nachbearbeitung mit Graphikprogrammen m\"oglichst ganz vermieden + werden. +\end{important} \subsection{Einfaches Plotten} @@ -190,7 +215,7 @@ Einen einfachen Linienplot zu erstellen ist denkbar einfach. Angenommen, es existiert einer Variable \code{y} im \enterm{Workspace}, die die darzustellenden Daten enth\"alt. Es gen\"ugt folgender Funktionsaufruf: \code{plot(y)}. Wenn bislang noch -keine Abbildung erstellt wurde \"offnet \matlab{} ein neues Fenster +keine Abbildung erstellt wurde, \"offnet \matlab{} ein neues Fenster und stellt die Daten als Linienplot dar. Dabei werden die Datenpunkte durch eine Linie verbunden. Die Messpunkte selbst sind nicht sichtbar. Wenn schon eine Abbildung existiert, wird der Inhalt @@ -206,26 +231,25 @@ von 1 bis zur L\"ange des Vektors \code{y}. Diese Skalierung der x-Achse ist nur in den wenigsten F\"allen erw\"unscht. Besser ist es, die zugeh\"origen x-Werte explixit zu \"ubergeben und so z.B. die y-Werte als Funktion der Zeit darzustellen (\code{plot(x, y)}). -Standard\"a{\ss}ig wird der erste Lininenplot mit in blau, mit +Standard\"a{\ss}ig wird der erste Lininenplot in blau, mit durchgezogener Linie, ohne Marker und der Strichst\"arke 1 dargestellt. Der zweite Linienplot erh\"alt automatisch die Farbe 'rot'. Alle anderen Eigenschaften sind identisch. Die Reihenfolge der Farben ist vordefiniert kann aber durch das Setzen einer \enter{colormap} beeinflusst werden. Die Tabellen -\ref{plotlinestyles} zeigen vordefinierte Werte f\"r den Linienstil, +\ref{plotlinestyles} zeigen vordefinierte Werte f\"ur den Linienstil, die Farbe und die verschiedenen Marker. - \begin{table}[tp] \titlecaption{Vordefinierte Linienstile (links), Farben (Mitte) und Markersymbole (rechts).}{}\label{plotlinestyles} \begin{minipage}[t]{0.3\textwidth} \vspace{0pt} \begin{tabular}{c|l} \textbf{Linienstil} & \textbf{K\"urzel} \\\hline - durchgezogen & '-' \\ - gestrichelt & '--' \\ - gepunktet & ':' \\ - Strichpunkte & '.-' \\\hline + durchgezogen & '\verb|-|' \\ + gestrichelt & '\verb|--|' \\ + gepunktet & '\verb|:|' \\ + Strichpunkte & '\verb|.-|' \\\hline \end{tabular} \end{minipage} \vspace{0pt} @@ -266,13 +290,12 @@ die Farbe und die verschiedenen Marker. \subsection{Ver\"andern von Linieneigenschaften} -Will man die Eigenschaften des Linienplots selbst bestimmen, so -empfiehlt es sich das dem \code{plot} Befehlt mitzuteilen. Folgender -Aufruft erzeugt einen roten Linienplot mit gepunkteter Linie der -St\"arke 1.5 und Strenmarkern and den Positionen der -Datenpunkte. Zus\"atzlich wird noch die Eigenschaft -\codeterm{displayname} gesetzt, um dem Linienplot einen Namen zu -geben, der in einer Legende verwendet werden kann. +Die Eigenschaften des Linienplots k\"onnen \"uber weitere Argumente +des \code{plot} Befehls ver\"andert werden. Folgender Aufruf erzeugt +einen roten Linienplot mit gepunkteter Linie der St\"arke 1.5 und +Sternmarkern an den Positionen der Datenpunkte. Zus\"atzlich wird noch +die Eigenschaft \codeterm{displayname} gesetzt, um dem Linienplot +einen Namen zu geben, der in einer Legende verwendet werden kann. \begin{lstlisting} x = 0:0.1:2*pi; y = sin(x); @@ -281,36 +304,39 @@ geben, der in einer Legende verwendet werden kann. \subsection{Ver\"andern von Achseneigenschaften} -Das erste, was ein Plot braucht ist eine Achsenbeschriftung. Mithilfe -der Funktionen \code{xlabel('Time [ms]')} und \code{ylabel('Voltage - [V]')} k\"onnen diese gesetzt werden. Standardm\"a{\ss}ig setzt -Matlab die Grenzen der x- und y-Achse so, dass die Daten -hineinpassen. Dabei wird meist auf den n\"achsten ganzzahligen Wert -aufgerundet. Will man diese manuell bestimmen, dann benutzt man die -Funktionen \code{xlim} und \code{ylim}. Diese erwarten als Argument -einen 2-elementigen Vektor mit dem Minimum und dem Maximum der -jeweiligen Achse. Tabelle \ref{plotaxisprops} listet weitere h\"aufig -genutzte Einstellungen der Achsen. Um sie zu ver\"andern benutzt man -die Funktion \code{set}. Listing \ref{niceplotlisting} Zeile 15 zeigt -wie sie verwendet wird. Die Funktion erwartet als erstes Argument ein -sogenanntes Handle der Achse, dieses wird gefolgt von einer beliebig -langen Reihe von Eigenschaft-Wert Paaren. Soll z.B. das Gitternetz der -x-Achse gezeigt werden, wird die Eigenschaft \codeterm{XGrid} auf den -Wert \codeterm{'on'} gesetzt: \code{set(gca, 'XGrid', 'on');}. Das -erste Argument ist ein Aufruf der Funktion \code{gca}, -``get-current-axis'' und ist das Achsenhandle. +Das erste, was ein Plot zus\"atzlich braucht, ist eine +Achsenbeschriftung. Mithilfe der Funktionen \code{xlabel('Time [ms]')} +und \code{ylabel('Voltage [V]')} k\"onnen diese gesetzt +werden. + +Standardm\"a{\ss}ig setzt Matlab die Grenzen der x- und y-Achse so, +dass die Daten hineinpassen. Dabei wird meist auf den n\"achsten +ganzzahligen Wert aufgerundet. Mit den Funktionen \code{xlim} und +\code{ylim} k\"onnen diese manuell eingestellt werden. Diese +Funktionen erwarten als Argument einen 2-elementigen Vektor mit dem +Minimum und dem Maximum der jeweiligen Achse. Tabelle +\ref{plotaxisprops} listet weitere h\"aufig genutzte Einstellungen der +Achsen. Mit der \code{set} - Funktion k\"onnen diese ver\"andert +werden wie in Zeile 15 in Listing \ref{niceplotlisting} gezeigt. Die +\code{set} - Funktion erwartet als erstes Argument ein sogenanntes Handle der +Achse, dieses wird gefolgt von einer beliebig langen Reihe von +Eigenschaft-Wert Paaren. Soll z.B. das Gitternetz der x-Achse gezeigt +werden, wird die Eigenschaft \codeterm{XGrid} auf den Wert +\codeterm{'on'} gesetzt: \code{set(gca, 'XGrid', 'on');}. Das erste +Argument ist ein Aufruf der Funktion \code{gca}, ``get-current-axis'' +und ist das Achsenhandle der gerade aktiven Achse. \begin{table}[tp] - \titlecaption{Ausgew\"ahlte Eigenschaften der Achse. Alle Eigenschaften der Achse findet man in der Hilfe oder im \codeterm{Property Editor}, siehe Abbildung \ref{ploteditorfig}. Wenn es eine definierte Auswahl von Einstellungen gibt, z.B. bei der Eigenschaft \codeterm{Box}, dann ist die Standardeinstellungen, als erstes gelistet.}{}\label{plotaxisprops} - \begin{tabular}{l|p{5cm}|p{5cm}} + \titlecaption{Ausgew\"ahlte Eigenschaften der Achse.}{ Alle Eigenschaften der Achse findet man in der Hilfe oder im \codeterm{Property Editor} (\figref{ploteditorfig}). Wenn es eine definierte Auswahl von Einstellungen gibt, z.B. bei der Eigenschaft \codeterm{Box}, dann ist die Standardeinstellungen als erstes gelistet.}\label{plotaxisprops} + \begin{tabular*}{1\textwidth}{lp{6.3cm}p{6cm}} \hline \textbf{Eigenschaft} & \textbf{Beschreibung} & \textbf{Optionen} \\ \hline \codeterm{Box} & Definiert, ob der Rahmen der Achse vollst\"andig gezeichnet wird. & $\{'on'|'off'\}$ \\ \codeterm{Color} & Hintergrundfarbe des Koordinatensystems. & Beliebige RGB, CMYK ... Werte. \\ \codeterm{Fontname} & Der Name der Schriftart. & Im System installierte Schriften. \\ \codeterm{FontSize} & Gr\"o{\ss}e der Schrift. & Skalarer Wert.\\ - \codeterm{FontUnit} & Einheit, in der die Schriftgr\"{\ss}e bestimmt wird. & $\{'points' | 'centimeters' | 'inches', ...\}$\\ - \codeterm{FontWeight} & Fett- oder Normalsatz der Schrift. & $\{normal' | 'bold'\}$\\ - & 'd' \\ + \codeterm{FontUnit} & Einheit, in der die Schriftgr\"o{\ss}e bestimmt wird. & $\{'points' | 'centimeters' | 'inches', ...\}$\\ + \codeterm{FontWeight} & Fett- oder Normalsatz der Schrift. & $\{'normal' | 'bold'\}$\\ +% & 'd' \\ ?????? \codeterm{TickDir} & Richtung der Teilstriche auf der Achse. & $\{'in' | 'out'\}$\\ \codeterm{TickLength} & L\"ange der Haupt- und Nebenteilstriche & \\ \codeterm{X-, Y-, ZDir} & Richtung der Achsskalierung. & $\{'normal' | 'reversed'\}$\\ @@ -318,23 +344,15 @@ erste Argument ist ein Aufruf der Funktion \code{gca}, \codeterm{X-, Y-, ZScale} & Lineare oder logarithmische Skalierung der Achse. & $\{'linear' | 'log'\}$\\ \codeterm{X-, Y-, ZTick} & Position der Teilstriche auf der Achse. & Vektor mit Positionen.\\ \codeterm{X-, Y-, ZTickLabel} & Beschriftung der Teilstriche. & Vektor mit entsprechenden Zahlen oder Cell-Array mit Strings.\\ \hline - \end{tabular} + \end{tabular*} \end{table} \subsection{Ver\"andern von Figure-Einstellungen} -Wie die Achse, hat auch das \codeterm{Figure} Element eine Reihe von -Eigenschaften, die nach Bedarf gesetzt werden k\"onnen (Tabelle -\ref{plotfigureprops} listet die meistverwendeten). Um sie zu setzen -verwendet man wieder die \code{set} Funktion. Das erste Argument ist -jetzt aber eine Handle f\"ur die Abbildung, nicht das -Koordinatensystem. Statt der Funktion \code{gca} wird \code{gcf}, -``get-current-figure'' benutzt. - \begin{table}[tp] - \titlecaption{Ausgew\"ahlte Eigenschaften der \codeterm{Figure}. Alle Eigenschaften der Achse findet man in der Hilfe con \matlab{} oder im \codeterm{Property Editor} wenn die Abbildung ausgew\"ahlt wurde (Abbildung \ref{ploteditorfig}).}{}\label{plotfigureprops} - \begin{tabular}{l|p{5cm}|p{5cm}} + \titlecaption{Ausgew\"ahlte Eigenschaften der \codeterm{Figure}.}{Alle Eigenschaften der Achse findet man in der Hilfe con \matlab{} oder im \codeterm{Property Editor} wenn die Abbildung ausgew\"ahlt wurde (\figref{ploteditorfig}).}\label{plotfigureprops} + \begin{tabular*}{1\textwidth}{lp{6.3cm}p{6cm}} \hline \textbf{Eigenschaft} & \textbf{Beschreibung} & \textbf{Optionen} \\ \hline \codeterm{Color} & Hintergrundfarbe der Zeichenfl\"ache. & Beliebige RGB, CMYK ... Werte. \\ \codeterm{PaperPosition} & Posistion der Abbildung auf dem Papier & 4-elementiger Vektor mit den Positionen der linken-unteren, und rechten-oberen Ecke. \\ @@ -344,6 +362,14 @@ Koordinatensystem. Statt der Funktion \code{gca} wird \code{gcf}, \end{tabular} \end{table} +Wie die Achse, hat auch das \codeterm{Figure} Element eine Reihe von +Eigenschaften, die nach Bedarf mit der \cide{set} - Funktion gesetzt +werden k\"onnen (Tabelle \ref{plotfigureprops} listet die +meistverwendeten). Das erste Argument f\"ur \code{set()} ist jetzt +aber eine Handle f\"ur die Abbildung, nicht das +Koordinatensystem. Statt der Funktion \code{gca} wird \code{gcf} +(\enterm{get-current-figure}) benutzt. + Das folgende Listing \ref{niceplotlisting} zeigt wie ein Skript aussehen k\"onnte, das die notwendigen Anpassungen vornimmt. Bei jedem Aufruf des Skripts wird exakt der gleiche Plot (Abbildung @@ -355,7 +381,6 @@ gespeichert. Dazu wird die Funktion \code{saveas} verwendet, die als erstes Argument wieder ein Handle auf die Figure erwartet. Das zweite Argument ist der Dateiname, und zuletzt muss das gew\"unschte Format (Box \ref{graphicsformatbox}) angegeben werden. -\clearpage \begin{lstlisting}[caption={Skript zur Erstellung des Plots in Abbildung \ref{spikedetectionfig}.}, label=niceplotlisting] figure() @@ -377,86 +402,91 @@ saveas(gcf, 'spike_detection.pdf', 'pdf') \end{lstlisting} \begin{figure} - \includegraphics[width=0.5\columnwidth]{./images/spike_detection} + \includegraphics[width=0.5\columnwidth]{spike_detection} \caption{\textbf{Annehmbarer Plot.} Dieser Plot wurde vollst\"andig mit dem Skript in Listing \ref{niceplotlisting} erstellt und gespeichert.}\label{spikedetectionfig} \end{figure} -Neben den Standard Linienplots gibt es eine ganze Reihe weiterer +Neben den Standard-Linienplots gibt es eine ganze Reihe weiterer M\"oglichkeiten Daten zu Visualisieren. Mathworks zeigt auf seiner Homepage viele Beispiele mit zugeh\"origem Code \url{http://www.mathworks.de/discovery/gallery.html}. - \begin{ibox}[t]{\label{graphicsformatbox}Dateiformate f\"ur Abbildungen.} - Im Wesentlichen gibt es zwei Arten von Dateiformaten f\"ur - Graphiken. + Es gibt zwei grunds\"atzlich verschiedene Arten von Dateiformaten f\"ur + Graphiken: \begin{enumerate} - \item \determ{Rastergraphik} (\enterm{Bitmap}) + \item \determ{Rastergraphik} (\enterm{bitmap}) \item \determ{Vektorgraphik} (\enterm{vector graphics}) \end{enumerate} Bei Rastergraphiken wird f\"ur jeden Bildpunkt (jedes Pixel) der - aktuelle Farbwert angegeben. Sie sind vor allem f\"ur Fotos - geeignet. Im Gegensatz dazu werden bei Vektorgraphiken die - Abbildungen durch sogenannte Primitive (Linien, Kreise, Polygone - ...) beschrieben. Der Vorteil der Vektorgraphiken - ist die Skalierbakeit ohne Qualit\"atsverlust.\\ - - - \begin{minipage}[t]{0.42\textwidth} - \includegraphics[width=\textwidth]{VectorBitmap.pdf} - \small{by Darth Stabro at en.wikipedia.org} - \vspace{0.1cm} + aktuelle Farbwert angegeben. Rastergraphiken haben eine bestimmte + Aufl\"osung (z.B. 300\,dpi --- dots per inch). Sie sind vor allem + f\"ur Fotos geeignet. Im Gegensatz dazu werden bei Vektorgraphiken + die Abbildungen durch sogenannte Primitive (Linien, Kreise, + Polygone, ...) beschrieben. Der Vorteil der Vektorgraphiken + ist die Skalierbakeit ohne Qualit\"atsverlust. + + \vspace{1ex} + \begin{minipage}[t]{0.38\textwidth} + \mbox{}\\[-2ex] + \includegraphics[width=0.93\textwidth]{VectorBitmap.pdf} + \rotatebox{90}{\footnotesize by Darth Stabro at en.wikipedia.org} \end{minipage} - \begin{flushright} + \hfill \begin{minipage}[t]{0.5\textwidth} - \vspace{-9.5cm} - Von \matlab{} unterst\"utzte Formate\footnote{Auswahl, mehr Information in der Hilfe zu \code{saveas}}:\\ - \begin{tabular}{l|c|l} - \textbf{Format} & \textbf{Typ} & \code{saveas} Argument} \\ \hline - pdf & Vektor & \codeterm{'pdf'} \\ - eps & Vektor & \codeterm{'eps','epsc'} \\ - SVG & Vektor & \codeterm{'svg'} \\ - PS & Vektor & \codeterm{'ps', 'psc'} \\ - jpg & Bitmap & \codeterm{'jpeg'} \\ - tif & Bitmap & \codeterm{'tiff', 'tiffn'} \\ - png & Bitmap & \codeterm{'png'} \\ - bmp & Bitmap & \codeterm{'bmp'} \\ + Von \matlab{} unterst\"utzte Formate\footnote{Auswahl, mehr Information in der Hilfe zu \code{saveas}}:\\[2ex] + \begin{tabular}{|l|c|l|} + \hline + \textbf{Format} & \textbf{Typ} & \code{saveas} Argument \rule[-1.2ex]{0pt}{3.5ex} \\ \hline + pdf & Vektor & \codeterm{'pdf'} \rule{0pt}{2.5ex} \\ + eps & Vektor & \codeterm{'eps', 'epsc'} \\ + SVG & Vektor & \codeterm{'svg'} \\ + PS & Vektor & \codeterm{'ps', 'psc'} \\ + jpg & Bitmap & \codeterm{'jpeg'} \\ + tif & Bitmap & \codeterm{'tiff', 'tiffn'} \\ + png & Bitmap & \codeterm{'png'} \\ + bmp & Bitmap & \codeterm{'bmp'} \\ \hline \end{tabular} \end{minipage} - \end{flushright} - + \vspace{1ex} + Wenn aus \matlab{} heraus Graphiken gespeichert werden sollen, dann - ist es meist sinnvoll sie als Vektorgraphik zu speichern. Im - Zweifelsfall k\"onnen diese sp\"ater in Rastergraphiken umgewandelt - werden. Der Weg von einer Rastergraphik zu einer Vektorgraphik ist - nich verlustfrei m\"oglich. Das Speichern von Abbildungen mit sehr - vielen graphischen Elementen (z.B. ein Rasterplot mit tausenden von - Aktionspotentialen) ist als Rastergraphik allerdings deutlich - schneller und speichereffizienter. + ist es meistens sehr sinnvoll sie als Vektorgraphik zu speichern. Im + Zweifelsfall k\"onnen diese sp\"ater immer noch in Rastergraphiken + umgewandelt werden. Der Weg von einer Rastergraphik zu einer + Vektorgraphik ist dagegen nicht verlustfrei m\"oglich. Das Speichern von + Abbildungen mit sehr vielen graphischen Elementen (z.B. ein + Rasterplot mit tausenden von Aktionspotentialen) ist als + Rastergraphik allerdings deutlich schneller und speichereffizienter. \end{ibox} -\subsection{Fazit} +\section{Fazit} Ein guter Datenplot stellt die Daten m\"oglichst vollst\"andig und n\"uchtern dar. Verzerrungen durch perspektivische Darstellungen, -Achs- oder Symbolskalierungen sollten vermieden werden. Wenn man -verschiedene Linienplots in einen Graphen plottet, sollte man neben -der Farbe auch den Linienstil (durchgezogen, gepunktet, gestrichelt, -etc.) variieren um auch im Schwarz-Wei{\ss}-Druck eine Unterscheidung zu -erm\"oglichen. Bei der Farbwahl sollte man auf Kombinationen aus Rot -und Gr\"un verzichten, da sie f\"ur einen nicht unwesentlichen Teil -der m\"annlichen Bev\"olkerung nicht unterscheidbar sind. Man achte -insbesondere auf: -\begin{enumerate} +Achs- oder Symbolskalierungen sollten vermieden werden. + +Wenn verschiedene Linienplots in einen Graphen geplottet werden, +sollte neben der Farbe auch der Linienstil (durchgezogen, gepunktet, +gestrichelt, etc.) variiert werden, um auch im Schwarz-Wei{\ss}-Druck +eine Unterscheidung zu erm\"oglichen. + +Bei der Farbwahl sollte auf +Kombinationen aus Rot und Gr\"un verzichtet werden, da sie f\"ur einen nicht +unwesentlichen Teil der m\"annlichen Bev\"olkerung nicht +unterscheidbar sind. + +Achte bei der Erstellung von Plots insbesondere auf: +\begin{itemize} \item Klarheit. -\item Vollstaendige Beschriftung. +\item Vollst\"andige und lesbare Beschriftung. \item Deutliche Unterscheidbarkeit von Kurven. \item Keine suggestive Darstellung. -\item Ausgewogenheit von Linienst\"arken Schrift- und Plotgr\"o{\ss}e. +\item Ausgewogenheit von Linienst\"arken, Schrift- und Plotgr\"o{\ss}e. \item Fehlerbalken, wenn sie angebracht sind. -\end{enumerate} +\end{itemize} diff --git a/scientificcomputing-script.tex b/scientificcomputing-script.tex index 7103672..fe5ac4e 100644 --- a/scientificcomputing-script.tex +++ b/scientificcomputing-script.tex @@ -11,9 +11,9 @@ \maketitle \tableofcontents -%\listoffigures -%\lstlistoflistings -%\listofiboxfs +\listoffigures +\lstlistoflistings +\listofiboxfs %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \part{Grundlagen des Programmierens}