summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/pst-plot/doc/dtk02-2.tex
blob: 353db1f24f80958c78aae1b29707295dbbb9db7f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
\documentclass[ngerman]{dtk}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
%\usepackage{pslatex}
\usepackage{tabularx}
\usepackage{url}
\usepackage{graphicx}
\usepackage{cite}
%\makeatletter
%\newcommand{\La}%
%   {L\kern-.36em
%        {\setbox0\hbox{T}%
%         \vbox to\ht0{\hbox{$\m@th$%
%                \csname S@\f@size\endcsname
%                \fontsize\sf@size\z@
%                \math@fontsfalse\selectfont
%                A}%
%            \vss}%
%        }}
%\makeatother
%\def\AllTeX{(\La\kern-.075em)\kern-.075em\TeX}

\begin{document}
\NeedPackage{tabularx}
\NeedPackage{url}
\NeedPackage{graphicx}
\NeedPackage{cite}


\title{Die Plot-Funktionen von \texttt{pst-plot}}
\author{Laura E. Jackson\and Herbert Voß}
\maketitle
\begin{abstract}
  Im letzten Heft wurden die mathematischen Funktionen von \PS~im
  Zusammenhang mit dem \LaTeX-Paket \texttt{pst-plot} zum Zeichnen von
  Funktionen beschrieben und durch Beispiele erläutert. In diesem Teil
  werden die bislang nur erwähnten Plot-Funktionen für externe Daten
  behandelt.
\end{abstract}

\section{Einführung}
Die graphische Darstellung externer Datensätze gehört zu den
Standardproblemen von technisch-wissenschaftlichen Veröffentlichungen.
Sehr häufig werden diese mit \texttt{gnuplot} eingelesen, dargestellt,
mit Koordinatenachsen und weiteren Hinweisen versehen und dann
abschließend nach \LaTeX\ exportiert. Im Folgenden werden Wege
aufgezeigt, die den Umweg über \texttt{gnuplot} oder entsprechende
Programme überflüssig machen können.

Die Geschichte und die Bedeutung von \PS\ wurden hinreichend im
letzten Heft \cite{dtk02.1:voss:mathematischen} behandelt, ebenso wie
das benötigte Paket \texttt{pst-plot}
(\url{CTAN:/graphics/pstricks/latex/pst-plot.sty}), welches Teil des
Pakets \texttt{pstricks} ist und mit der Anweisung
\texttt{\textbackslash{}usepackage\{pst-plot\}} einzubinden ist. Daher
braucht an dieser Stelle nicht weiter auf diese spezifischen Dinge
eingegangen zu werden.

Das Paket \texttt{pst-plot} stellt die folgenden drei Plot-Funktionen
für die Darstellung externer Daten mit folgender Syntax zur Verfügung:

\begin{verbatim}
\fileplot*[<Parameter>]{<Dateiname>}
\dataplot*[<Parameter>]{<Befehle>}
\listplot*[<Parameter>]{<Liste>}
\end{verbatim}

Die Sternversionen stehen hierbei wie für alle Objekte von
\texttt{PSTricks} jeweils für die inverse Darstellung der Daten,
d.\,h. für eine standardmäßige Schwarz-Weiß-Grafik erhält man mit der
Sternversion das Negativ. Im Folgenden wird nur die normale
Darstellung berücksichtigt, da dies keine Einschränkung der
Allgemeinheit bedeutet.

Im Zusammenhang mit den Plot-Funktionen sind noch folgende Befehle
interessant, die ebenfalls durch das Paket \texttt{pst-plot} definiert
sind:

\begin{verbatim}
\readdata{<Objectname>}{<Dateiname>}
\savedata{<Objectname>}{<Dateiname>}
\end{verbatim}

Weitere Informationen kann man der Dokumentation zu \texttt{pstricks}
entneh\-men\cite{pstricks} oder der umfangreichen Beschreibung in
\cite{companion,girou:01:,girou:02:}, die jedoch alle nicht die
wesentlichen Unterschiede zwischen den drei Plot-Funktionen
herausarbeiten. Für alle Beispiele wird jeweils die komplette
\texttt{pspicture}-Umgebung angegeben, so dass eine direkte Übernahme
der Beispiele möglich ist. Eine Dokumentation des
\texttt{multido}-Befehls findet man unter \url{CTAN:
  /macros/latex209/contrib/multido/multido.doc}, alle anderen hier
nicht weiter erwähnten in der Dokumenation zu
\texttt{pstricks} \cite{pstricks}.

\section{Plot-Stile}

Insbesondere der Plot-Stil ist als Parameter von Bedeutung und kann
folgende Werte annehmen:

\noindent\begin{tabularx}{1.0\linewidth}{rX}\toprule
  \emph{Stilparameter}	  & \emph{Bedeutung}\\\midrule
%  \hline
  \texttt{plotstyle=dots} & Wertepaare als einzelne Punkte setzen\\
  \texttt{=line}	  & Wertepaare durch eine Gerade verbinden\\
  \texttt{=polygon}	  & Wie \texttt{line}, nur mit geschlossenem
			    Linienzug\\
  \texttt{=curve}	  & Interpolation zwischen den Wertepaaren,
			    wobei die Kurve über den Anfangs-/Endpunkt
			    hinausgehen kann\\
  \texttt{=ecurve}	  & Wie \texttt{curve}, nur beginnt/endet die
			    Kurve bei dem Anfangs-/Endwertepaar.\\
  \texttt{=ccurve}	  & Wie \texttt{curve}, nur mit geschlossenem
			    Kurvenzug\\\bottomrule
\end{tabularx}

Bei einer fehlenden Angabe wird grundsätzlich die \texttt{line}-Option
gewählt.


\section{Beispiele für \texttt{\textbackslash{}fileplot}}

\texttt{fileplot} ist immer dann angebracht, wenn in einer Datei
gespeicherte Zahlenpaare $(x|y)$ geplottet werden sollen. Diese sind
als reine Zahlenwerte paarweise in einer oder mehreren Zeilen
anzuordnen und dürfen nur auf vier verschiedene Arten getrennt sein
(Leerschritt, Komma oder runde bzw. geschweifte Klammern):

\verb#x y       x,y       (x,y)       {x,y}#

Der als Trenner häufig benutzte Tabulator (\texttt{\textbackslash{}t}
bzw. \texttt{\textbackslash{}009}) ist demnach nicht zulässig, kann
aber leicht durch Texteditoren oder für Unix mit

\texttt{tr '\textbackslash{}t' ' ' < inFile > outFile}

ersetzt werden. Diese Datendateien dürfen bis auf das \TeX-übliche
Kommentarzeichen "`\%"' keine anderen Zeichen außer den
Zahlenwerten selbst enthalten.

Das erste Beispiel zeigt ein UV/VIS-Absorptionsspektrum ($A=\lg
\frac{I_{0}}{I}$ als Funktion der Wellenlänge), während das zweite
eine Populationsentwicklung in Abhängigkeit des Brutfaktors darstellt
(Feigenbaum-Diagramm). Aus dem jeweils angegebenen Quellcode ergibt
sich die Art des Plot-Stils.

\begin{minipage}[c]{0.45\linewidth}%
  \centering\includegraphics{plot-pdf-fig1}
\end{minipage}%
\hfill\begin{minipage}[c]{0.52\linewidth}%
  \scriptsize
\begin{verbatim}
\psset{xunit=0.003cm,yunit=1.5cm}
\begin{pspicture}(-0.25,-0.25)(1950,4)
  \fileplot[plotstyle=line, linewidth=1.5pt]{%
    fileplot.data}
  \psaxes[dx=400,Dx=400]{->}(1900,4)
  \multido{\n=200+200}{9}{%
    \psline[linestyle=dotted](\n,0)(\n,4)
  }
  \multido{\n=+1}{5}{%
    \psline[linestyle=dotted](0,\n)(1800,\n)
  }
\end{pspicture}
\end{verbatim}
\end{minipage}%

\begin{minipage}[c]{0.48\linewidth}%
\centering\includegraphics{plot-pdf-fig2}
\end{minipage}%
\hfill{}\begin{minipage}[c]{0.48\linewidth}%
\scriptsize\begin{center}
\begin{verbatim}
\psset{xunit=1.5cm,yunit=6cm}
\begin{pspicture}(-0.25,-.25)(4.25,1)
  \fileplot[plotstyle=dots]{feigenbaum.data}
  \psaxes{->}(0,0)(4.05,1)
  \rput(4,-0.05){$x$}
  \rput(0.2,1.05){$y$}
  \rput[l](0.2,3.5){Feigenbaum-Diagramm}
\end{pspicture}
\end{verbatim}
\end{center}
\end{minipage}%


\texttt{fileplot} hat den Vorteil der einfachen Anwendung, aber den
wesentlichen Nachteil, extrem speicherintensiv zu sein, denn \TeX{}
muss erst alle Zahlenpaare vor einer weiteren Verarbeitung laden. Man
kann davon ausgehen, dass man bei mehr als 1000 Punkten
Schwierigkeiten mit der standardmäßig eingestellten
\TeX-Speicherkapazität bekommen kann. Weiterhin erhöht sich durch das
Laden der Zahlenpaare die Zeit eines Kompilationsvorgangs ganz
erheblich.

Eine Möglichkeit, Speicherproblemen aus dem Weg zu gehen, ist die
Anwendung der \texttt{\textbackslash{}PSTtoEPS}-Funktion des Pakets
\texttt{pst-eps}, auf die hier jedoch nicht weiter eingegangen wird
(siehe dazu \cite{pstricks}).


\section{Beispiel für \texttt{\textbackslash{}dataplot}}

Ebenso wie \texttt{\textbackslash{}fileplot} benötigt
\texttt{\textbackslash{}dataplot} einen externen Datensatz, der durch
eine andere Anwendung erstellt wurde. Im Gegensatz dazu kann dieser
externe Datensatz jedoch nicht mit \texttt{\textbackslash{}dataplot}
selbst geladen werden. Dies erfolgt mit dem oben angegebenen
Befehl \texttt{\textbackslash{}readdata}, beispielsweise

\texttt{\textbackslash{}readdata\{\textbackslash{}feigenbaum\}\{feigenbaum.data\}}

\texttt{\textbackslash{}feigenbaum} ist dann der Name des
Grafikobjekts. Die Zahl der eingelesenen Dateien ist nur durch den
Speicher bestimmt, d.\,h. dass mit \texttt{\textbackslash{}dataplot}
einfache Overlays möglich sind. Die Ausgabe dieser Daten erfolgt mit
\texttt{\textbackslash{}dataplot\{<Objektname>\}}, beispielsweise
\texttt{\textbackslash{}dataplot\{\textbackslash{}feigenbaum\}}.

Das angegebene Beispiel zeigt zwei getrennte Datendateien, die in
einem Koordinatensystem dargestellt werden. Es handelt sich um die
Sortierzeiten der Verfahren "`Bubble-Sort"' und "`Select-Sort"' in
Abhängigkeit der Anzahl der zu sortierenden Elemente, wobei das
Verfahren der Parameter ist. Die Anordnung der Elemente war zu Beginn
jeweils zufällig verteilt.

\begin{minipage}[c]{0.55\linewidth}%
  \centering\includegraphics{plot-pdf-fig3}
\end{minipage}%
\hfill{}\begin{minipage}[c]{0.42\linewidth}%
  \scriptsize\begin{center}
\begin{verbatim}
\psset{xunit=0.0005cm,yunit=0.005cm}
\begin{pspicture}(0,0)(10000,1000)
  \readdata{\bubble}{bubble.data}
  \readdata{\select}{select.data}
  \dataplot[plotstyle=line]{\bubble}
  \dataplot[plotstyle=line]{\select}
  \psline{->}(0,0)(10000,0)
  \psline{->}(0,0)(0,1000)
  \rput[l](40,920){Zeit}
  \rput[r](9990,-30){Elemente}
  \rput[l](4500,800){Bubble-Sort}
  \rput[l](7500,200){Select-Sort}
\end{pspicture}
\end{verbatim}
\end{center}
\end{minipage}%


Grundsätzlich bleibt festzustellen, dass für den reinen Anwender zwischen
\texttt{dataplot} und \texttt{fileplot} formal kein wesentlicher Unterschied
besteht. Bei größeren Datenmengen bringt \texttt{dataplot} den Vorteil
der schnelleren Verarbeitung und Darstellung, wobei es dafür aber
noch speicherplatzintensiver als \texttt{fileplot} ist.

Weiterhin benutzt \texttt{\textbackslash{}dataplot} intern die im
nächsten Abschnitt beschriebene Funktion
\texttt{\textbackslash{}listplot}, wenn Parameter angegeben werden.
Daraus folgt, dass \texttt{\textbackslash{}dataplot} letztlich nur
Sinn macht, wenn Polygonzüge gezeichnet werden sollen. In diesem Fall
zeichnet sich diese Funktion durch eine größere Plot-Geschwindigkeit
aus, macht aber andererseits nichts anderes als die
\texttt{pspolygon}-Funktion.


\section{Beispiel für \texttt{\textbackslash{}listplot}}

Im Gegensatz zu den vorhergehenden Plot-Funktionen wird das Argument
von \texttt{\textbackslash{}listplot} zuerst von \TeX{} expandiert,
wenn es sich um einen \TeX-Befehl handelt, andernfalls wird es
unverändert an \PS\ durchgereicht. Daraus folgt, dass man komplette
\PS-Programme im Argument von \texttt{\textbackslash{}listplot}
ablegen kann. Diese Möglichkeit der Kombination von \TeX{} und
\PS\ bleibt jedoch in der gesamten Literatur zu \texttt{PSTricks}
faktisch unberücksichtigt. Dies liegt wohl auch daran, dass
\texttt{PSTricks} sehr \PS-nah programmiert wurde, sodass sich
letztlich für jede Anwendung entsprechende \texttt{PSTricks}-Befehle
finden lassen.

Das angegebene Beispiel zeigt in der Originaldarstellung die
Entwicklung eines Hènon-Attraktors. Die rechte Grafik enthält
zusätzlich zum normalen Datensatz einen durch erweiterten \PS-Code
erzwungenen "`Draft"'-Hinweis. Hierbei ist zum Verständnis allerdings
eine Kenntnis der \PS-Befehle unabdingbar, wenn dies fehlerfrei
erfolgen soll. Der angegebene Source\-code enthält aus Platzgründen
nicht die eigentlichen Daten, die lediglich aus einer Folge von
Zahlenpaaren bestehen, die durch "`space"' voneinander zu trennen
sind.

\begin{minipage}[c]{0.48\linewidth}%
\centering\includegraphics{plot-pdf-fig4}
\end{minipage}%
\hfill{}\begin{minipage}[c]{0.48\linewidth}%
\centering\includegraphics{plot-pdf-fig5}
\end{minipage}

\begin{minipage}[t]{0.48\linewidth}%
\scriptsize\begin{verbatim}
\readdata{\henon}{henon.dat}
\psset{xunit=1.5cm, yunit=3cm}
\begin{pspicture}(-2,-0.75)(2.25,1.5)
  \psaxes{->}(0,0)(-2,-0.5)(1.5,1.25)
  \listplot[%
    showpoints=true,%
    plotstyle=curve]{\henon}
\end{pspicture}
\end{verbatim}
\end{minipage}%
\hfill{}\begin{minipage}[t]{0.48\linewidth}%
\scriptsize\begin{center}\begin{verbatim}
\newcommand{\DataB}{%
  [ ... Daten ... ]
  gsave          % speichere Grafikstatus
  /Helvetica findfont 40 scalefont setfont
  45 rotate      % Rotiere um 45 Grad
  0.9 setgray    % 1 entspricht Weiß
  -60 10 moveto (DRAFT) show
  grestore
}
\psset{xunit=1.5cm, yunit=3cm}
\begin{pspicture}(-3,-0.75)(2.25,1.5)
  \psaxes{->}(0,0)(-2,-0.5)(1.5,1.25)
  \listplot[%
    showpoints=true,%
    plotstyle=curve]{\dataB}
\end{pspicture}
\end{verbatim}
\end{center}
\end{minipage}%


Zum Manipulieren des Datensatzes von \texttt{\textbackslash{}listplot}
kann alternativ auch die entsprechende Funktion aus \texttt{pst-plot}
verändert werden. Möchte man beispielsweise, aus welchen Gründen auch
immer, die $x|y$-Werte vertauschen und den Graphen um 45° rotieren
lassen (was einer Rotation um die x-Achse mit anschließender Drehung
entspricht), so kann dies einfach durch Neudefinition von
\texttt{\textbackslash{}pst@def} erfolgen, was dann zur folgenden
Abbildung führt:

\begin{minipage}{0.48\linewidth}
\scriptsize\begin{center}\begin{verbatim}
\makeatletter
\pst@def{ScalePoints}<%
%----------------------------------------
  45 rotate % rotiere alle Objekte
%----------------------------------------
  /y ED /x ED
  counttomark dup dup cvi eq 
  not { exch pop } if
  /m exch def /n m 2 div cvi def
  n {
%----------------------------------------
     exch % tausche oberste Stackelemente
%----------------------------------------
     y mul m 1 roll
     x mul m 1 roll
     /m m 2 sub
     def } repeat>
\makeatother
\end{verbatim}
\end{center}\end{minipage}%
\hfill
\begin{minipage}{0.48\linewidth}
  \centering\includegraphics{plot-pdf-fig6}
\end{minipage}


\bibliography{plot}

\address{Herbert}{Voß}{Wasgenstr. 21\\14129 Berlin\\voss@perce.de}
\address{Laura Elizabeth}{Jackson}{Raleigh, North Carolina (USA)\\
 lejacks2@unity.ncsu.edu }
\end{document}