% % TeX macros to plot error bars with the PicTeX macros. % % These macros are largely derived from the examples in the back % of the PiCTeX manual. % % To plot with a mark at each data point, simply say % % \plotWith mark M at x1 y1 x2 y2 .... xN yN / % % where "M" is a mark character {e.g. $\bullet$} % % To include error bars in the plot, say: % % \plotWithErrorBars mark M at % x1 y1 e1 % x2 y2 e2 .... xN yN eN % / % % The line-breaking isn't needed. Marks are placed on the graph % at (xi, yi) for each data point. Vertical error bars are drawn % from (xi, yi + ei) to (xi, yi - ei). % % The cross-bar at the top and bottom of the error bars is normally % 5 pts, but can be changed by setting the \crossbarlength dimen. % % % Dirk Grunwald Apr 20 1988 % % \newdimen\dyposition \newdimen\crossbarlength \crossbarlength=5pt \newdimen\lastPlotX \newdimen\lastPlotY \newdimen\tmpPlotX \newdimen\tmpPlotY % % \def\plotErrorBar#1 #2 #3 #4{% \message{ Plot #4 at #1 #2 }% \put {#4} at {#1} {#2} \dyposition=\Ydistance{#3} \put{% \vbox{% \hsize=\crossbarlength% \hrule height \linethickness% \vskip -.5\linethickness% \centerline{\vrule width \linethickness height 2\dyposition}% \nointerlineskip% \vskip -.5\linethickness% \hrule height \linethickness}% } at {#1} {#2} } % \def\plotWithErrorBars mark #1 at #2 #3 #4 {% \def\errorBarMark{#1}% % % plot first point % \plotErrorBar {#2} {#3} {#4} {\errorBarMark} \lastPlotX=\Xdistance{#2}% \lastPlotY=\Ydistance{#3}% \futurelet\nextcharacter\plotErrorBarLoop} % \def\plotErrorBarLoop{% \if/\nextcharacter% \def\plotErrorBarAction{\plotErrorBarFinish}% \else% \def\plotErrorBarAction{\plotErrorBarContinued}% \fi% \plotErrorBarAction} % \def\plotErrorBarFinish/ {} % \def\plotErrorBarContinued#1 #2 #3 {% \plotErrorBar {#1} {#2} {#3} {\errorBarMark}% \tmpPlotX = \Xdistance{#1}% \tmpPlotY = \Ydistance{#2}% \setdimensionmode% \plot {\lastPlotX} {\lastPlotY} {\tmpPlotX} {\tmpPlotY} / \setcoordinatemode% \lastPlotX = \tmpPlotX% \lastPlotY = \tmpPlotY% \futurelet\nextcharacter\plotErrorBarLoop} % \def\plotWith mark #1 at #2 #3 {% \def\plotWithMark{#1}% % % plot first point % \message{Plot {\plotWithMark} at #2 #3}% \put {\plotWithMark} at {#2} {#3} \lastPlotX=\Xdistance{#2}% \lastPlotY=\Ydistance{#3}% \futurelet\nextcharacter\plotWithLoop} % \def\plotWithLoop{% \if/\nextcharacter% \def\plotWithAction{\plotWithFinish}% \else% \def\plotWithAction{\plotWithContinued}% \fi% \plotWithAction} % \def\plotWithFinish/ {} % \def\plotWithContinued#1 #2 {% \message{ Plot {\plotWithMark} at #1 #2}% \put {\plotWithMark} at {#1} {#2} \tmpPlotX = \Xdistance{#1}% \tmpPlotY = \Ydistance{#2}% \setdimensionmode% \plot {\lastPlotX} {\lastPlotY} {\tmpPlotX} {\tmpPlotY} / \setcoordinatemode% \lastPlotX = \tmpPlotX% \lastPlotY = \tmpPlotY% \futurelet\nextcharacter\plotWithLoop}