summaryrefslogtreecommitdiff
path: root/macros/plain/contrib/misc/plotting.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/plain/contrib/misc/plotting.tex')
-rw-r--r--macros/plain/contrib/misc/plotting.tex369
1 files changed, 369 insertions, 0 deletions
diff --git a/macros/plain/contrib/misc/plotting.tex b/macros/plain/contrib/misc/plotting.tex
new file mode 100644
index 0000000000..ab3c59d0ac
--- /dev/null
+++ b/macros/plain/contrib/misc/plotting.tex
@@ -0,0 +1,369 @@
+%
+% plotting.tex - TeX Plotting Macros
+%
+% author: Laurence G. Yaffe (lgy@newton.phys.washington.edu) 1987
+%
+\setbox0 = \hbox{$0$}%
+\newdimen \digitheight \digitheight = \ht0
+\newdimen \titlespacing \titlespacing = 1.5 ex
+\newdimen \labelspacing \labelspacing = 0.9 ex
+\newdimen \labelwidth \labelwidth = 0.0 pt
+\newdimen \ticklength \ticklength = 0.7 em
+\newdimen \plotheight \plotheight = 5.0 in
+\newdimen \plotwidth \plotwidth = 5.0 in
+\newdimen \linewidth \linewidth = 0.241 pt
+\newskip \padding \padding = 0pt plus 1fil
+%
+\newbox \xAxis
+\newbox \XAxis
+\newbox \yAxis
+\newbox \YAxis
+\newbox \PlotData
+\newbox \PlotBox
+%
+\def\ratio #1:#2% adjust padding for log scale plotting
+ {%
+ \count255 = #1#2
+ \ifnum \count255=11 \global\padding = 0pt plus 1.00000 fil \else
+ \ifnum \count255=12 \global\padding = 0pt plus 0.30103 fil \else
+ \ifnum \count255=23 \global\padding = 0pt plus 0.17609 fil \else
+ \ifnum \count255=34 \global\padding = 0pt plus 0.12494 fil \else
+ \ifnum \count255=45 \global\padding = 0pt plus 0.09691 fil \else
+ \ifnum \count255=56 \global\padding = 0pt plus 0.07918 fil \else
+ \ifnum \count255=67 \global\padding = 0pt plus 0.06695 fil \else
+ \ifnum \count255=78 \global\padding = 0pt plus 0.05799 fil \else
+ \ifnum \count255=89 \global\padding = 0pt plus 0.05115 fil \else
+ \ifnum \count255=91 \global\padding = 0pt plus 0.04576 fil \else
+ \ifnum \count255=13 \global\padding = 0pt plus 0.47712 fil \else
+ \ifnum \count255=14 \global\padding = 0pt plus 0.60206 fil \else
+ \ifnum \count255=24 \global\padding = 0pt plus 0.30103 fil \else
+ \ifnum \count255=25 \global\padding = 0pt plus 0.39794 fil \else
+ \ifnum \count255=26 \global\padding = 0pt plus 0.47712 fil \else
+ \ifnum \count255=36 \global\padding = 0pt plus 0.30103 fil \else
+ \ifnum \count255=46 \global\padding = 0pt plus 0.17609 fil \else
+ \ifnum \count255=61 \global\padding = 0pt plus 0.22185 fil \else
+ \ifnum \count255=51 \global\padding = 0pt plus 0.30103 fil \else
+ \ifnum \count255=41 \global\padding = 0pt plus 0.39794 fil \else
+ \ifnum \count255=31 \global\padding = 0pt plus 0.52288 fil \else
+ \ifnum \count255=21 \global\padding = 0pt plus 0.69897 fil \else
+ \global\padding = 0pt
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ }%
+%
+\def\centered #1{\vbox to 0pt {\vss \hbox to 0pt {\hss #1\hss}\vss}}%
+%
+\def\dash #1%
+ {%
+ \vbox {\hrule height 0.5 \linewidth depth 0.5 \linewidth width #1}%
+ }%
+%
+\def\yaxis #1#2%
+ {%
+ \global\setbox \yAxis = \hbox
+ {%
+ \def \temp {#1}%
+ \ifx \temp\empty \else
+ \vbox to \plotheight {\vss \hbox {#1}\vss}%
+ \kern 0.7 \titlespacing
+ \fi
+ \def \temp {#2}%
+ \ifx \temp\empty \else
+ \labelwidth = 0pt
+ \setbox1=\box0\ytic #2,\cr,%
+ \ifnum \labelwidth = 0 \kern -\labelspacing \fi
+ \hbox to \labelwidth {\hfil}\box0%
+ \fi
+ \hbox to 0pt
+ {\hss \vrule height \plotheight depth 0pt width \linewidth \hss}%
+ }%
+ }%
+\def\ytic #1,%
+ {%
+ \def \temp {#1}%
+ \def \quit {\cr}%
+ \ifx \temp\quit
+ \let\next=\relax
+ \setbox0 = \vbox to \plotheight {\unvbox0 \unskip}%
+ \else
+ \let\next=\ytic \skip0 = \padding
+ \setbox1 = \hbox {\tenpoint $#1$}%
+ \ifnum \labelwidth < \wd1
+ \labelwidth = \wd1
+ \fi
+ \setbox1 = \hbox
+ {%
+ \smash
+ {%
+ \ifnum \wd1 = 0
+ \kern \labelspacing
+ \hbox to 0pt {\dash {0.67 \ticklength}\hss}%
+ \else
+ \lower 0.42 \digitheight \hbox to 0pt {\hss \unhbox1}%
+ \kern \labelspacing
+ \hbox to 0pt {\dash \ticklength \hss}%
+ \fi
+ }%
+ }%
+ \setbox0 = \vbox to \plotheight {\box1 \vskip \skip0 \unvbox0}%
+ \fi
+ \next
+ }%
+%
+\def\Yaxis #1#2%
+ {%
+ \global\setbox \YAxis = \hbox
+ {%
+ \hbox to 0pt
+ {\hss \vrule height \plotheight depth 0pt width \linewidth \hss}%
+ \def \temp {#2}%
+ \ifx \temp\empty \else \setbox1=\box0 \Ytic #2,\cr,\box0 \fi
+ \def \temp {#1}%
+ \ifx \temp\empty \else
+ \kern 0.7 \titlespacing
+ \vbox to \plotheight {\vss \hbox {#1}\vss}%
+ \fi
+ }%
+ }%
+\def\Ytic #1,%
+ {%
+ \def \temp {#1}%
+ \def \quit {\cr}%
+ \ifx \temp\quit
+ \let\next=\relax
+ \setbox0 = \vbox to \plotheight {\unvbox0 \unskip}%
+ \else
+ \let\next=\Ytic \skip0=\padding
+ \setbox1 = \hbox {\tenpoint $#1$}%
+ \setbox1 = \hbox
+ {%
+ \smash
+ {%
+ \ifnum \wd1=0
+ \hbox to 0pt {\hss \dash {0.67 \ticklength}}%
+ \else
+ \hbox to 0pt {\hss \dash \ticklength}%
+ \kern \labelspacing
+ \lower 0.42 \digitheight \box1%
+ \fi
+ }%
+ }%
+ \setbox0 = \vbox to \plotheight {\box1 \vskip \skip0 \unvbox0}%
+ \fi
+ \next
+ }%
+%
+\def\xaxis #1#2%
+ {%
+ \global\setbox \xAxis = \vtop
+ {%
+ \smash {\dash \plotwidth}%
+ \nointerlineskip
+ \def \temp {#2}%
+ \ifx \temp\empty \else \hbox to \plotwidth {\xtic #2,\cr,}\fi
+ \nointerlineskip
+ \def \temp {#1}%
+ \ifx \temp\empty \else
+ \kern 0.7 \titlespacing
+ \hbox to \plotwidth {\hss #1\hss}%
+ \fi
+ }%
+ }%
+\def\xtic #1,%
+ {%
+ \def \temp {#1}%
+ \def \quit {\cr}%
+ \ifx \temp\quit
+ \let\next=\unskip
+ \else
+ \let\next=\xtic
+ \vtop
+ {%
+ \setbox1 = \hbox to 0pt {\hss \tenpoint $#1$\hss}%
+ \ifnum \ht1=0
+ \smash
+ {\hbox to 0pt
+ {\hss \vrule height 0.67 \ticklength width \linewidth \hss}%
+ }%
+ \else
+ \smash
+ {\hbox to 0pt
+ {\hss \vrule height \ticklength width \linewidth \hss}%
+ }%
+ \nointerlineskip
+ \kern \labelspacing
+ \box1%
+ \fi
+ }%
+ \hskip \padding
+ \fi
+ \next
+ }%
+%
+\def\Xaxis #1#2%
+ {%
+ \global\setbox \XAxis = \vbox
+ {%
+ \def \temp {#1}%
+ \ifx \temp\empty \else
+ \hbox to \plotwidth {\hss #1\hss}%
+ \kern \titlespacing
+ \fi
+ \nointerlineskip
+ \def \temp {#2}%
+ \ifx \temp\empty \else \hbox to \plotwidth {\Xtic #2,\cr,}\fi
+ \nointerlineskip
+ \smash {\dash \plotwidth}%
+ }%
+ }%
+\def\Xtic #1,%
+ {%
+ \def \temp {#1}%
+ \def \quit {\cr}%
+ \ifx \temp\quit
+ \let\next=\unskip
+ \else
+ \let\next=\Xtic
+ \vbox
+ {%
+ \setbox1 = \hbox to 0pt {\hss \tenpoint $#1$\hss}%
+ \ifnum \ht1=0
+ \smash
+ {\hbox to 0pt
+ {\hss \vrule depth 0.67 \ticklength width \linewidth \hss}%
+ }%
+ \else
+ \box1%
+ \kern \labelspacing
+ \nointerlineskip
+ \smash
+ {\hbox to 0pt
+ {\hss \vrule depth \ticklength width \linewidth \hss}%
+ }%
+ \fi
+ }%
+ \hskip \padding
+ \fi
+ \next
+ }%
+%
+\def\plotbox (#1,#2)%
+ {%
+ \global\setbox \PlotData = \hbox to 0pt
+ {%
+ \unhbox \PlotData
+ \rlap {\kern #1\plotwidth \raise #2\plotheight \copy\PlotBox}%
+ }%
+ }%
+\def\plottext (#1,#2)#3%
+ {%
+ \setbox \PlotBox = \hbox {#3}%
+ \plotbox (#1,#2)%
+ }%
+\def\plotpoint (#1,#2)%
+ {%
+ \setbox \PlotBox = \centered.%
+ \plotbox (#1,#2)%
+ }%
+\def\plotsymbol (#1,#2)#3%
+ {%
+ \setbox \PlotBox = \centered {#3}%
+ \plotbox (#1,#2)%
+ }%
+\def\xrange #1]{\def\XRange {#1]}}%
+\def\yrange #1]{\def\YRange {#1]}}%
+%
+\def\makeplot #1#2#3%
+ {%
+ \plotwidth = #1 \plotheight = #2
+ \setbox \xAxis = \hbox to \plotwidth {\hfil}%
+ \setbox \XAxis = \hbox to \plotwidth {\hfil}%
+ \setbox \yAxis = \vbox to \plotheight {\vfil}%
+ \setbox \YAxis = \vbox to \plotheight {\vfil}%
+ \setbox \PlotData = \hbox {}%
+ {#3}%
+ \hbox
+ {%
+ \box \yAxis
+ \box \PlotData
+ \vbox
+ {%
+ \box \XAxis
+ \nointerlineskip \kern \plotheight \nointerlineskip
+ \box \xAxis
+ }%
+ \box \YAxis
+ }%
+ }%
+%
+\def\psfile #1% --- deferred input of postscript file ---
+ {%
+ \global\setbox \PlotData = \hbox to 0pt
+ {%
+ \unhbox \PlotData \special {psfile=#1}%
+ }%
+ }%
+%
+\def\addPS #1% --- immediate input of postscript commands ---
+ {%
+ \global\setbox \PlotData = \hbox to 0pt
+ {%
+ \unhbox \PlotData \special {"#1}%
+ }%
+ }%
+%
+\def\plotdatafile #1#2% --- deferred input of data file ---
+ {%
+ \global\setbox \PlotData = \hbox to 0pt
+ {%
+ \unhbox \PlotData
+ \special
+ {%
+ datafile="#1"
+ dash="[#2]"
+ xrange="\XRange"
+ yrange="\YRange"
+ hsize=\the\plotwidth\space
+ vsize=\the\plotheight\space
+ linewidth=\the\linewidth
+ }%
+ }%
+ }%
+%
+\def\plotdata #1#2% --- immediate input of data points ---
+ {%
+ \global\setbox \PlotData = \hbox to 0pt
+ {%
+ \unhbox \PlotData
+ \special
+ {%
+ datalist="#1"
+ dash="[#2]"
+ xrange="\XRange"
+ yrange="\YRange"
+ hsize=\the\plotwidth\space
+ vsize=\the\plotheight\space
+ linewidth=\the\linewidth
+ }%
+ }%
+ }%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Trivial Plotting Example
+%
+%\makeplot {5 in}{4.5 in}%
+% {%
+% \linewidth = 0.3 pt
+% \Xaxis {Title}{}
+% \Yaxis {\kern -5pt $Y$}{,2,4,6,8,10}
+% \yaxis {$y$}{0.0,,0.2,,0.4,,0.6,,0.8,,1.0}
+% \xaxis {$x$}{10^0 \ratio 1:2,\ratio 2:3,\ratio 3:4,\ratio 4:5,\ratio 5:6,
+% \ratio 6:7,\ratio 7:8,\ratio 8:9,\ratio 9:1,
+% 10^1 \ratio 1:2,\ratio 2:3,\ratio 3:4,\ratio 4:5,\ratio 5:6,
+% \ratio 6:7,\ratio 7:8,\ratio 8:9,\ratio 9:1,
+% 10^2 \ratio 1:1}
+% \plotsymbol (.9,.9)a
+% \plottext (.2,.4){some text}
+% \plottext (.25,.7){more text}
+% }%
+%\bye