worked on the plotting chapter
This commit is contained in:
parent
de0aa2735b
commit
755f45b487
@ -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
|
||||
|
36
plotting/lecture/outlier.py
Normal file
36
plotting/lecture/outlier.py
Normal file
@ -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();
|
@ -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}
|
||||
|
||||
|
@ -11,9 +11,9 @@
|
||||
\maketitle
|
||||
|
||||
\tableofcontents
|
||||
%\listoffigures
|
||||
%\lstlistoflistings
|
||||
%\listofiboxfs
|
||||
\listoffigures
|
||||
\lstlistoflistings
|
||||
\listofiboxfs
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\part{Grundlagen des Programmierens}
|
||||
|
Reference in New Issue
Block a user