| .TH GRAP 1 |
| .SH NAME |
| grap \- pic preprocessor for drawing graphs |
| .SH SYNOPSIS |
| .B grap |
| [ |
| .I file ... |
| ] |
| .SH DESCRIPTION |
| .I Grap |
| is a |
| .IR pic (1) |
| preprocessor for drawing graphs on a typesetter. |
| Graphs are surrounded by the |
| .I troff |
| `commands' |
| .B \&.G1 |
| and |
| .BR \&.G2 . |
| Data are scaled and plotted, |
| with tick marks supplied automatically. |
| Commands exist to modify the frame, |
| add labels, override the default ticks, |
| change the plotting style, |
| define coordinate ranges and transformations, |
| and include data from files. |
| In addition, |
| .I grap |
| provides the same loops, conditionals, and macro processing that |
| .I pic |
| does. |
| .PP |
| .BI frame |
| .B ht |
| .I e |
| .B wid |
| .I e |
| .B top |
| .B dotted |
| .IR ... : |
| Set the frame around the graph to specified |
| .B ht |
| and |
| .BR wid ; |
| default is 2 by 3 (inches). |
| The line |
| .I styles |
| .RB ( dotted , |
| .BR dashed , |
| .BR invis , |
| .BR solid |
| (default)) |
| of the |
| .I sides |
| .RB ( top , |
| .BR bot , |
| .BR left , |
| .BR right ) |
| of the frame can be set |
| independently. |
| .PP |
| .B label |
| .I side |
| .B \&"a label" |
| .B \&"as a set of strings" |
| .IR adjust : |
| Place label on specified side; default side is bottom. |
| .I adjust |
| is |
| .B up |
| (or |
| .B down |
| .B left |
| .BR right ) |
| .I expr |
| to shift default position; |
| .B width |
| .I expr |
| sets the width explicitly. |
| .PP |
| .BI ticks |
| .I side |
| .B in |
| .B at |
| .IR "optname expr, expr, ..." : |
| Put ticks on |
| .I side |
| at |
| .I "expr, ..., |
| and label with |
| .I \&"expr"\f1. |
| If any |
| .I expr |
| is followed by "...", label tick with "...", |
| and turn off all automatic labels. |
| If "..." contains |
| .BR %f 's, |
| they will be interpreted as |
| .B printf |
| formatting instructions for the tick value. |
| Ticks point |
| .B in |
| or |
| .B out |
| (default out). |
| Tick iterator: instead of |
| .B at |
| .IR \&... , |
| use |
| .BI from |
| .I expr |
| .B to |
| .I expr |
| .B by |
| .I "op expr |
| where |
| .I op |
| is optionally |
| .B +-*/ |
| for additive or multiplicative steps. |
| .B by |
| can be omitted, to give steps of size 1. |
| If no ticks are requested, they are supplied automatically; |
| suppress this with |
| .B ticks |
| .BR off . |
| Automatic ticks normally |
| leave a margin of 7% on each side; set this to anything by |
| .B margin |
| .B = |
| .IR expr . |
| .PP |
| .B grid |
| .I "side linedesc" |
| .B at |
| .IR "optname expr, expr, ..." : |
| Draw grids perpendicular to |
| .I side |
| in style |
| .I linedesc |
| at |
| .I "expr, ....\& |
| Iterators and labels work as with ticks. |
| .PP |
| .B coord |
| .I optname |
| .B x |
| .I "min, max" |
| .B y |
| .I "min, max" |
| .B "log x |
| .BR " log y" : |
| Set range of coords and optional log scaling on either or both. |
| This overrides computation of data range. |
| Default value of |
| .I optname |
| is current coordinate system |
| (each |
| .B coord |
| defines a new coordinate system). |
| .PP |
| .B plot |
| .I \&"str" |
| .B at |
| .IR point ; |
| .B |
| .I \&"str" |
| .B at |
| .IR point : |
| Put |
| .I str |
| at |
| .IR point . |
| Text position can be qualified with |
| .BR rjust , |
| .BR ljust , |
| .BR above , |
| .BR below |
| after "...". |
| .PP |
| .B line |
| .B from |
| .I point |
| .B to |
| .IR "point linedesc" : |
| Draw line from here to there. |
| .B arrow |
| works in place of |
| .BR line . |
| .PP |
| .B next |
| .I optname |
| .B at |
| .IR "point linedesc" : |
| Continue plot of data in |
| .I optname to |
| .IR point ; |
| default is current. |
| .PP |
| .BI draw |
| .IR "optname linedesc ..." : |
| Set mode for |
| .BR next : |
| use this style from now on, |
| and plot "..." at each point (if given). |
| .PP |
| .BI new |
| .IR "optname linedesc ..." : |
| Set mode for |
| .BR next , |
| but disconnect from previous. |
| .PP |
| A list of numbers |
| .I "x y1 y2 y3 ... |
| is treated as |
| .B plot |
| .B bullet |
| .B at |
| .IR x,y1 ; |
| .B plot |
| .B bullet |
| .B at |
| .IR x,y2 ; |
| etc., or as |
| .B next |
| .B at |
| .I x,y1 |
| etc., if |
| .B draw |
| is specified. |
| Abscissae of 1,2,3,... are provided if there is only one input number per line. |
| .PP |
| A |
| point |
| .I "optname expr, expr |
| maps the point to the named coordinate system. |
| A |
| .I linedesc |
| is one of |
| .B dot |
| .B dash |
| .B invis |
| .B solid |
| optionally followed by an expression. |
| .PP |
| .BI define |
| .I name |
| .BI { whatever } \f1: |
| Define a macro. |
| There are macros already defined for standard plotting |
| symbols like |
| .BR bullet , |
| .BR circle , |
| .BR star , |
| .BR plus , |
| etc., in |
| .BR \*9/lib/grap.defines , |
| which is included if it exists. |
| .PP |
| .I var |
| .B = |
| .IR expr : |
| Evaluate an expression. |
| Operators are |
| .B= |
| .B + |
| .B - |
| .B * |
| and |
| .BR / . |
| Functions are |
| .B log |
| and |
| .B exp |
| (both base 10), |
| .BR sin , |
| .BR cos , |
| .BR sqrt ; |
| .B rand |
| returns random number on [0,1); |
| .BI max( e , e )\f1, |
| .BI min( e , e )\f1, |
| .BI int( e )\f1. |
| .PP |
| .B print |
| .IR expr ; |
| .B print |
| \fL"\f2...\fL"\f1: |
| As a debugging aid, print |
| .I expr |
| or |
| .I string |
| on the standard error. |
| .PP |
| .B copy |
| \fL"\fIfile name\fL"\fR: |
| Include this file right here. |
| .PP |
| .B copy |
| .B thru |
| .IR macro : |
| Pass rest of input (until |
| .BR \&.G2 ) |
| through |
| .IR macro , |
| treating each field (non-blank, or "...") as an argument. |
| .I macro |
| can be the name of a macro previously defined, |
| or the body of one in place, like |
| .BR "/plot $1 at $2,$3/" . |
| .PP |
| .B copy |
| .B thru |
| .I macro |
| .B until |
| \fL"\fIstring\fL"\fR: |
| Stop copy when input is |
| .I string |
| (left-justified). |
| .PP |
| .BI pic |
| .IR "remainder of line" : |
| Copy to output with leading blanks removed. |
| .PP |
| .BI graph |
| .IR "Name pic-position" : |
| Start a new frame, place it at specified position, |
| e.g., |
| .B graph |
| .B Thing2 |
| .BR "with .sw at Thing1.se + (0.1,0)" . |
| .I Name |
| must be capitalized to keep |
| .I pic |
| happy. |
| .PP |
| .BI \&. "anything at beginning of |
| .IR line : |
| Copied verbatim. |
| .PP |
| .B sh |
| .BI % anything |
| .BR % : |
| Pass everything between the |
| .BR % 's |
| to the shell; |
| as with macros, |
| .B % |
| may be any character and |
| .I anything |
| may include newlines. |
| .PP |
| .B # |
| .IR anything : |
| A comment, which is discarded. |
| .PP |
| Order is mostly irrelevant; no category is mandatory. |
| Any arguments on the |
| .B \&.G1 |
| line are placed on the generated |
| .B \&.PS |
| line for |
| .IR pic . |
| .SH EXAMPLES |
| .EX |
| .ps -1 |
| .vs -1 |
| \&.G1 |
| frame ht 1 top invis right invis |
| coord x 0, 10 y 1, 3 log y |
| ticks left in at 1 "bottommost tick", 2,3 "top tick" |
| ticks bot in from 0 to 10 by 2 |
| label bot "silly graph" |
| label left "left side label" "here" |
| grid left dashed at 2.5 |
| copy thru / circle at $1,$2 / |
| 1 1 |
| 2 1.5 |
| 3 2 |
| 4 1.5 |
| 10 3 |
| \&.G2 |
| .G1 |
| frame ht 1 top invis right invis |
| coord x 0, 10 y 1, 3 log y |
| ticks left in at 1 "bottommost tick", 2,3 "top tick" |
| ticks bot in from 0 to 10 by 2 |
| label bot "silly graph" |
| label left "left side label" "here" |
| grid left dashed at 2.5 |
| copy thru / circle at $1,$2 / |
| 1 1 |
| 2 1.5 |
| 3 2 |
| 4 1.5 |
| 10 3 |
| .G2 |
| .ps |
| .vs |
| .EE |
| .SH FILES |
| .TF \*9/lib/grap.defines |
| .TP |
| .B \*9/lib/grap.defines |
| definitions of standard plotting characters, e.g., bullet |
| .SH SOURCE |
| .B \*9/src/cmd/grap |
| .SH "SEE ALSO" |
| .IR pic (1), |
| .IR troff (1) |
| .br |
| J. L. Bentley and B. W. Kernighan, |
| ``GRAP\(emA Language for Typesetting Graphs'', |
| .I |
| Unix Research System Programmer's Manual, |
| Tenth Edition, Volume 2. |