Trailing-Edge
-
PDP-10 Archives
-
decuslib20-04
-
decus/20-0126/apman.mem
There is 1 other file named apman.mem in the archive. Click here to see a list.
Programming Note 25/2 Page 1
EASY GRAPH PLOTTING
-------------------
Rob Cook
Computer Centre
La Trobe University
21-Jun-77
CONTENTS
--------
1.0 FUNCTION 2
2.0 ATOPLT SUBROUTINES AND CALLING SEQUENCES 3
2.1 Plotting a Single Graph 3
2.2 Plotting Up to 14 Sets of Data on the Same Graph 5
2.3 Changing Plotting Parameters 7
2.4 Obtaining Values of Plotting Parameters 7
2.5 Plotting the Tick Values as Character Strings 10
2.6 Plotting Logarithms of Data 12
2.7 Plotting Least Squares Lines 13
2.8 To Plot One Graph and a Least Squares Line 13
2.9 Plotting the Tick Values as Integers 15
2.10 Fixing the Tick Value Increment 16
2.11 Fixing One Tick Value 17
2.12 Fixing the Origin and Windowing 18
2.13 Even Simpler Graph Plotting 19
3.0 USAGE 20
3.1 Gould Plotter 20
3.2 Tektronix 4012 20
3.3 Internal Details 20
3.4 Error Messages 21
APPENDIX A - ATOPLT Variable Parameters A-1
APPENDIX B - Centring Symbols B-1
Programming Note 25/2 Page 2
1.0 FUNCTION
Two FORTRAN subroutines ONEPLT and ATOPLT allow a programmer
to plot graphs of one set of data against another using only one
subroutine call. Either the Gould plotter or the Tektronix 4012
terminal can be used.
ONEPLT draws one graph, plotting corresponding values from X
and Y arrays and representing each point by a symbol. The points
may optionally be joined by straight lines. The graph is drawn
in a standard sized box with a title along the top edge. The
data will be scaled so that the graph fits neatly into the box,
or the user may specify the scaling. Tick marks are drawn along
each edge and scale values are written at every second tick along
the axes. The axes are titled, and if necessary the title will
include an exponent multiplier for the tick values.
ATOPLT will super-impose up to 14 graphs on the one plot.
The data points are represented by different symbols which can be
selected by the programmer. All the points will be scaled to a
single overall scale to fit into the standard box. Ranges of
data for various graphs should therefore be compatible. The
points of each graph may optionally be joined by straight lines.
The form of the plot is the same as for ONEPLT, except that
ATOPLT adds a notes box to the right of the graph. The notes box
contains an explanation for each symbol.
A third subroutine, ATOPRM, allows the programmer to change
the values of parameters used by ONEPLT and ATOPLT in drawing the
plot, if the defaults are unsuitable. The parameters whose
values may be changed, and their default values, are detailed in
Appendix A.
Other routines allow the plotting of the logarithms of data
values, plot text as tick labels instead of numbers and draw
least squares lines.
A data set is defined, for the purposes of this document, as
a set of ordered co-ordinate pairs (X,Y) which will, when
plotted, be identified by the same centred symbol. Different
sets are represented by different symbols.
Programming Note 25/2 Page 3
2.0 ATOPLT SUBROUTINES AND CALLING SEQUENCES
2.1 Plotting a Single Graph
CALL ONEPLT(X,Y,N,XTTL,NX,YTTL,NY,HTTL,NH)
X a real array containing the X data.
Y a real array containing the Y data.
N the number of elements in X and Y.
XTTL either a literal or an array containing the X axis
title.
NX the number of characters in XTTL. If NX is negative
the symbols plotted at the data points are joined by
straight line segments. The maximum is about 50
characters.
YTTL either a literal or an array containing the Y axis
title.
NY the number of characters in YTTL. If NY is negative no
symbols will be drawn and the data points will be
joined by straight lines. The maximum is about 30
characters.
HTTL either a literal or an array containing the graph
title.
NH the number of characters in HTTL. The maximum is about
50 characters.
Programming Note 25/2 Page 4
C Example 1
C
REAL A(8), B(8)
DATA A /3.45, 2.67, 1.32, 4.44, 2.34, 8.00, 9.04,11.23/
DATA B /2.33, 4.36, 2.84, 1.23, 4.65, 7.01,11.35,15.24/
C
CALL ONEPLT(A,B,8,'X data',6,'Y data',6,'Example 1',9)
END
C Example 2
C
REAL X(100), Y(100)
C
DO 100 I = 1, 100
X(I) = I / 2.0
Y(I) = SIN(X(I)) - X(I)
100 CONTINUE
CALL ONEPLT(X,Y,100,'X data',-6,'Y data',6,'Example 2',9)
END
Programming Note 25/2 Page 5
2.2 Plotting Up To 14 Sets Of Data On The Same Graph
The data arrays X and Y contain the values for up to 14 data
sets. The data sets are distinguished by introducing a third
array, ISYM, of the same size. Each element of ISYM is an
integer (1 to 14) which indicates the data set to which the
corresponding elements of X and Y belong. For example if
ISYM(3), ISYM(6), and ISYM(14) contains the value 3 then the
points (X(3),Y(3)), (X(6),Y(6)), (X(14),Y(14)), belong to the
same data set. The value of an element of ISYM also has a unique
correspondence with a symbol (see table of symbols in Appendix
B), and that symbol is used to plot all points in a particular
data set. For the example above, points (X(3), Y(3)), (X(6),
Y(6)) and (X(14), Y(14)) will be represented by the symbol in the
table corresponding to integer 3. This method allows the
programmer to fill X and Y arrays in any order he wishes,
provided that he fills the ISYM array in the same order. If any
element of ISYM is negative the data point corresponding to that
element will be joined to the previous data point of the same
data set by a straight line.
Each data set can be identified by a title written in the
notes box. The titles are specified in the rows of the NOTES
array, one title per symbol used. The titles may each be up to
20 characters long, drawn in two lines of ten characters each.
The note contained in the elements (1,1), (1,2), (1,3), (1,4), of
the array NOTES are associated with the data set represented by
the lowest absolute valued symbol. (2,1), (2,2), are associated
with the second lowest valued symbol and so on.
The argument values are not altered by ATOPLT.
CALL ATOPLT (X,Y,ISYM,N,XTTL,NX,YTTL,NY,HTTL,NH,NOTES,NN)
X a real array containing X values for all the data sets.
Y a real array containing Y values for all the data sets.
ISYM an integer array containing values in the range -14 to
-1 and 1 to 14. Each element specifies the symbol to
be drawn for the corresponding (X,Y) point. Any other
values in the array will cause the corresponding data
point to be ignored and a warning message typed.
N the number of elements in X,Y and ISYM.
XTTL either a literal or an array containing the X axis
title.
NX the number of characters in XTTL. The maximum is about
60 characters.
YTTL either a literal or an array containing the Y axis
title.
NY the number of characters in YTTL. The maximum is about
30 characters.
HTTL either a literal or an array containing the graph
heading.
NH the number of characters in HTTL. The maximum is about
60 characters.
NOTES an NN by 4 array containing the notes to be drawn in
the note box.
NN the number of notes in XNOTES need not be the same as
the number of symbols used, in which case, the first NN
symbols will be 'noted' and extra notes will be
ignored.
Programming Note 25/2 Page 6
C Example 3
C
REAL X(200), Y(200)
INTEGER ISYM(200), NOTES(2,4)
C
DATA ISYM/100*1,100*-14/
DATA (NOTES(1,I),I=1,3)/'Y=Sin(X) and'/
DATA (NOTES(2,I),I=1,2)/'Y=Cos(X)'/
C
DO 100 I = 1, 100
X(I) = I / 10.0
X(I+100) = X(I)
Y(I) = SIN(X(I))
Y(I+100) = COS(X(I))
100 CONTINUE
CALL ATOPLT(X,Y,ISYM,200,'X data',6,'Y data',6,
* 'Example 3',9,NOTES,2)
END
Programming Note 25/2 Page 7
2.3 Changing Plotting Parameters
There are 45 parameters in ONEPLT and ATOPLT which may be
set by the user to vary the way the graph is plotted. This gives
the user with special requirements considerable flexibility to
change the size, shape and details of the graph produced.
The changeable parameters are numbered 1 to 45 (see Appendix
A for definitions and default values). Default values are
changed by a call to the routine ATOPRM which identifies the
parameters to be altered and supplies new values. A new value
for any parameter remains in effect for all subsequent calls of
ATOPLT and ONEPLT.
CALL ATOPRM(N,IP,XP)
N the number of elements in IP and XP (i.e. the number
of parameters to be changed), limit 45.
IP an integer array containing the integer codes
corresponding to the parameters to be changed.
XP a real array containing the new values of the
parameters. The new values must correspond in order
with the identifying integers in array IP.
2.4 Obtaining The Values Of ATOPLT Parameters
The current settings of the ATOPLT parameters can be read by
calling the ATOGET subroutine. You will need to read the values
if you want to change them by ATOPRM and set them back to their
original values later, or if you are writing programs to work on
different plotters whose parameters may differ.
CALL ATOGET(N,IP,XP)
N number of parameters to be read
IP an integer array containing the integer values
corresponding to the parameters to be read
XP a real array that receives the current values of the
parameters
Programming Note 25/2 Page 8
EXAMPLE of use of ATOPRM to produce an overall grid in a graph
box.
DIMENSION IP(4), XP(4)
C
DATA IP, XP /7, 26, 27, 8, 220.0, 280.0, -2.0, 0.0/
C
CALL ATOPRM(4,IP,XP)
CALL ATOPLT(X,Y,ISYM,200,'X data',6,'Y data',6,
* 'Example 4',9,NOTES,2)
END
This will cause the ticks to be made the same size as the
axis (7 corresponds to X axis tick size, 26 corresponds to Y axis
tick size, both set to default axis length), and half density
lines to be drawn, i.e. a half density grid will be drawn over
the graph.
Programming Note 25/2 Page 9
The above example depends on the fixed numbers 220.0 and
280.0 as the lengths of the Y and X axes, which is true for the
Gould plotter but not for the Tektronix. The ATOGET subroutine
could be used to find the actual sizes of the axes, and the
program would become independent of plotter and any changes made
to the axis length.
DIMENSION IP(4), IG(2), XP(4)
C
DATA IP, XP /7, 26, 27, 8, 220.0, 280.0, -2.0, 0.0/
DATA IG /4, 3/
C
CALL ATOGET (2, IG, XP)
C
CALL ATOPRM (4, IP, XP)
CALL ATOPLT(X,Y,ISYM,200,'X data',6,'Y data',6,
* 'Example 4',9,NOTES,2)
END
Programming Note 25/2 Page 10
2.5 Plotting The Tick Values As Character Strings
For some applications it is useful to be able to write a
character string at a tick instead of a number. For example,
' Jan ' is more meaningful than '1.0', if you are specifying
monthly data. This can be done by calling the subroutine ATOCHL
before you call ATOPLT or ONEPLT. In the call to ATOCHL, you
specify an array containing the labels to be used at successive
ticks. Each label is a maximum of five characters and will be
centred on the tick. So that if your label has three characters
you should specify it as, e.g. ' Jan '. The first string is
drawn at the origin and the strings are plotted at every other
tick.
Character labels are meaningless unless you fill the values
for the ticks, so the ATOCHL call allows the programmer to
specify the increment and origin value too. If you provide less
labels than there are ticks, ATOPLT will re-use your labels when
it runs out. So if you provide ' Jan ' through to ' Dec ' and
there are 24 positions, the months will appear twice.
Once ATOCHL has been used to set character labelling, it
remains in effect for all subsequent calls to ATOPLT and ONEPLT,
until a second call to ATOCHL is used to unset character
labelling.
CALL ATOCHL(IXY,NLAB,TLAB,TINC,ORGV)
IXY 1 : set X-axis character labels
2 : set Y-axis character labels
-1 : unset X-axis character labels
-2 : unset Y-axis character labels
NLAB integer number of labels provided; limit 24
TLAB array containing NLAB labels, each occupying
one element and given in A5 format.
TINC increment in value per tick
ORGV value at axis origin.
Programming Note 25/2 Page 11
DIMENSION DAYS(7)
C
DATA DAYS/' Sun Mon Tue Wed Thu Fri Sat '/
C
CALL ATOCHL(1,7,DAYS,0.5,0.0)
CALL ONEPLT(A,B,8,'X data',6,'Y data',6,'Example 5',9)
END
Programming Note 25/2 Page 12
2.6 Plotting Logarithms Of Data
The logarithms of the data can be plotted by calling the
subroutine ATOLOG before calling ATOPLT or ONEPLT. ATOLOG merely
asks ATOPLT to use logarithms; it does not do any plotting
itself. If during subsequent plotting any of the data to be
plotted are negative a warning message is typed and the point is
ignored.
Once ATOLOG has been used to set logarithm plotting, it
remains in effect for all subsequent calls to ONEPLT or ATOPLT,
until a second call to ATOLOG is used to unset logarithm
plotting.
CALL ATOLOG(IXY)
IXY 1 : set to plot logarithm of X-data
2 : set to plot logarithm of Y-data.
-1 : unset to plot logarithm of X-data
-2 : unset to plot logarithm of Y-data
CALL ATOLOG(1)
CALL ONEPLT(A,B,8,'X data',6,'Y data',6,'Example 6',9)
Programming Note 25/2 Page 13
2.7 Plotting Least Squares Lines
Users plotting results from experiments may find it useful
to add the linear least squares line that fits the data points.
Two methods are available. By calling the subroutine ATOLSQ
before calling ATOLPT or ONEPLT, the programmer can ask for a
least squares line to be fitted to any or all of his data sets.
By calling ATOLSP, he can ask for a linear least squares line
that passes through a fixed point, for example [0,0].
After calls to ATOLSQ or ATOLSP, least squares lines will be
added to plots drawn by all subsequent calls to ATOPLT and ONEPLT
until a second call to ATOLSQ or ATOLSP sets the number of least
squares lines, N, to zero.
CALL ATOLSQ(N,IDS)
N number of least squares lines (use 1 for ONEPLT)
IDS array containing N data set indicator values (use 1 for
ONEPLT)
CALL ATOLSP(IDS,XPT,YPT,N)
N number of last squares lines.
IDS array containing N data set indicator values
XPT,YPT arrays of co-ordinates of the fixed points
2.8 To Plot One Graph And A Least Squares Line
The ONEPLS subroutine is identical to ONEPLT except that it
adds a least squares line to the plot.
CALL ONEPLS(X,Y,N,XTTL,NX,YTTL,NY,HTTL,NH)
Programming Note 25/2 Page 14
CALL ATOLSQ(1,1)
CALL ONEPLT(A,B,8,'X data',6,'Y data',6,'Example 7',9)
or
CALL ONEPLS(A,B,8,'X data',6,'Y data',6,'Example 7',9)
Programming Note 25/2 Page 15
2.9 Plotting The Tick Values As Integers
Tick values are normally plotted as REALs to 2 decimal
places. The programmer can request INTEGER labels by setting the
appropriate parameter using ATOPRM:
Parameter Value
X-axis INTEGER labels 37 1.0
Y-axis INTEGER labels 38 1.0
CALL ATOPRM(1,37,1.0)
CALL ONEPLT(A,B,8,'X data',6,'Y data',6,'Example 8',9)
Programming Note 25/2 Page 16
2.10 Fixing The Tick Value Increment
ATOPLT examines the data to be plotted and selects values
for the origin of each axis and the increment in the value for
each tick, so that axes cover the data as closely as possible
while still giving 'sensible' numbers at each tick.
Although the tick numbers are 'sensible' they may not be
what the user requires. One way of getting better results is to
specify the increment in value for each tick by a call to ATOPRM.
To do this effectively, you need to have some idea of the range
of your data and to be aware that ATOPLT writes the tick value on
every other tick, starting at the origin. Therefore the
-----
specified increment should be half the difference in numbers
drawn at the ticks. A tick value of 0.0 means 'not specified'.
Parameter
X-axis tick value increment 33
Y-axis tick value increment 34
CALL ATOPRM(1,33,0.5)
CALL ONEPLT(A,B,8,'X data',6,'Y data',6,'Example 9',9)
Programming Note 25/2 Page 17
2.11 Fixing One Tick Value
Continuing on the same theme, to get a neat labelling for an
axis may require more than just fixing the increment. For
example, fixing the increment at 1.0 may give you labels of 1.13,
2.13, 3.13,..., whereas you would prefer 1.00, 2.00,... To do
this you can both fix the increment and insist that a given value
appears at one tick along the axis. In this case, you could say
that 2.0 is to be a tick value. Two ATOPRM parameters must be
used. You must declare that you are fixing a tick value and give
the value.
Parameter Value
X-fix-value-flag 31 1.0
X fixed value 35 value
Y-fix-value-flag 32 1.0
Y fixed value 36 value
ATOPLT uses your fixed value (and increment if specified)
and calculates an origin value and tick spacing so that the whole
of your data will fit on to the graph.
DIMENSION IP(2), XP(2)
DATA IP, XP /31, 35, 1.0, 5.0/
C
CALL ATOPRM(2,IP,XP)
CALL ONEPLT(A,B,8,'X data',6,'Y data',6,'Example 10',10)
END
Programming Note 25/2 Page 18
2.12 Fixing The Origin And Windowing
Another alternative is to specify the value at the origin of
the axis. ATOPLT will "window" your data, that is, any data
values that fall below your origin will not be plotted and lines
joining these points to points on the graph will terminate at the
graph border. If you specify a value increment as well, you are
fixing the values at the end-points of the axis, because the axis
contains a fixed number of points (that can be calculated from
the axis length and the tick spacing) and data will be windowed
at both ends of the axis.
Parameter Value
X-fix-value-flag 31 2.0
X-origin-value 35 value
Y-fix-value-flag 32 2.0
Y-origin-value 36 value
DIMENSION IP(2), XP(2)
DATA IP, XP /31, 35, 2.0, 3.0/
C
CALL ATOPRM(2,IP,XP)
CALL ONEPLT(A,B,8,'X data',6,'Y data',6,'Example 11',10)
END
Programming Note 25/2 Page 19
2.13 Even Simpler Graph Plotting
These subroutines are extremely simple to use, for example,
for students without much knowledge of FORTRAN. Standard titles
are supplied. Both SIMPLT and SIMPLS plot a graph given the
coordinates of the points. SIMPLS adds a least squares line.
CALL SIMPLT(X,Y,N)
and
CALL SIMPLS(X,Y,N)
X array containing X coodinates of points
Y array containing Y coordinates of points
N size of X and Y arrays
CALL SIMPLT(A,B,8)
Programming Note 25/2 Page 20
3.0 USAGE
3.1 Gould Plotter
There is a library file, PLPLOT.REL, on the PIC: directory
containing ATOPLT configured for the Gould plotter. To load or
execute a program that calls ATOPLT, use a command of the form:
.EXECUTE program, PIC:PLPLOT/SEARCH
-
In a batch job, add a $INCLUDE card following $FORTRAN cards but
before the $DATA or $EXECUTE card:
$INCLUDE PIC:PLPLOT/SEARCH
Each time a call to ATOPLT is executed a file will be
created with a name of the form Q??S1.PLT. All files named *.PLT
are queued to the plotter at logout but they can be plotted at
any time by using the PLOT command to the monitor.
3.2 Tektronix 4012
The Tektronix terminal must be initialized correctly for
graph plotting. If you have any problems use the SET TTY command
at monitor level:
.SET TTY NO CRLF FORM WIDTH 80
-
There is a second library on the PIC: directory containing
ATOPLT configured for the Tektronix terminal. To load or execute
a program that calls ATOPLT, use a command of the form:
.EXECUTE program, PIC:TKPLOT/SEARCH
-
3.3 Internal Details
1. ATOPLT subroutines require at least 6P of memory and may
require up to 13P depending on the features used.
2. Entry parts to ATOPLT are:
ATOCHL, ATOGET, ATOLOG, ATOLSQ
ATOLSP, ATOPLT, ATOPRM, ONEPLS
ONEPLT, SIMPLS, SIMPLT
3. There are a large number of concealed subroutines in the
ATOPLT system. They all have names of the form AP????, and
users are advised not to use similar names to avoid the
possibility of conflict. ATOPLT also uses named COMMON areas
with names of the form AP????.
Programming Note 25/2 Page 21
4. ATOPLT has been written to be as independent as possible of
the particular plotter hardware and software. Any user
wishing to convert ATOPLT to work with some other plotter
should consult PD36.
3.4 Error Messages
1. %ATPPOR ATOPRM index p out of range.
ATOPRM parameters must lie in the range 1<p<45.
- -
2. %ARPPLV ATOPRM parameter p value v is less than n
%ATPPXV ATOPRM parameter p value v exceeds n.
Some parameters have limits which cannot be exceeded.
3. %ATPAPL Attempt to plot log of v - point ignored
v is a negative number and ATOPLT was asked to plot its
logarithm.
4. %ATPTML Too many text labels supplied.
The user cannot give more than 24 text labels in a call to
ATOCHL.
5. %ATPNOV No origin value supplied with text labels.
Text labelling must be combined with fixing the tick origin.
6. %ATPIOR XY-axis indicator out of range n
The XY indicator must be either 1 for the X axis or 2 for the
Y axis.
7. %ATPTMD Too many data sets in ATOLSQ call: n.
%ATPTMD Too many data sets in ATOLSP call: n.
Only 14 data sets can be used for least squares line drawing.
8. %ATPIOR Data point I out of range n.
The data set indicators in the ISYM array must be in the
range -14 to +14.
APPENDIX A
ATOPLT VARIABLE PARAMETERS
The values of the parameters given below may be altered, by
using the ATOPRM subroutine, allowing the ATOPLT user greater
flexibility in choosing his graph layout. The units of all the
values given below are 'plotter units' i.e. mm *
magnification-factor unless otherwise stated.
The physical size of the plot is determined by the paper size
for the Gould plotter and by the size of the screen for the
Tektronix. The default parameters are defined so that the drawing
fills the physical plotting area. The lengths of the various
parameters are in plotter units. Normally these units are mm, but
they can be altered by setting magnification factors for each axis
which affects all lines drawn in that direction.
Parameter Gould Tektronix
--------- ----- ---------
4012
----
Overall Parameters
------------------
Physical size of the plot in mm X 1 400.0 200.0
Y 2 260.0 150.0
Magnification factor - 0.5 is X 28 1.0 1.0
half size and 2.0 double size Y 29 1.0 1.0
Coordinates of the graph origin X 5 50.0 27.0
relative to the plot origin Y 6 15.0 15.0
Lengths of the axes X 3 280.0 130.0
Y 4 220.0 120.0
Width of the notes box 9 55.0 41.0
Coordinates of the Program X 42 0.0 0.0
ID message Y 43 5.0 5.0
Close the plot on exit from 30 1.0 1.0
ATOPLT flag 1.0 = close plot
0.0 = leave plot open
ATOPLT VARIABLE PARAMETERS Page A-2
Titling
-------
Coordinates of X axis title X 11 8.0 50.0
Y 12 2.0 1.0
Coordinates of Y axis title X 13 30.0 6.0
Y 14 40.0 40.0
Clearance of plot title from 18 3.0 3.0
top of graph frame (the plot
title is centred over the frame)
Ticks Along the Axes
--------------------
Spacing between ticks on axis X 10 10.0 10.0
Y 45 10.0 10.0
Height of ticks on each axis X 7 2.5 2.5
Y 26 2.5 2.5
Difference between heights of 8 1.5 1.5
alternate ticks (one setting
for both axes)
Line density for ticks 27 1.0 1.0
(1.0 for full density,
-2.0 for half density
-4.0 for quarter density etc.)
Clearance of labels from 20 2.0 1.5
graph frame
Clearance of log labels exponent 41 0.75 0.75
power for exponents
Integer labels (rather than X 37 0.0 0.0
reals) 0.0=reals; 1.0=integers Y 38 0.0 0.0
Increment in data values between X 33 0.0 0.0
ticks. 0.0 means ATOPLT will Y 34 0.0 0.0
scale values to fit ticks
Fix-tick-value flags X 31 0.0 0.0
0.0 means no fixed values Y 32 0.0 0.0
1.0 means that (35,36) give
tick value
2.0 means that (35,36) give any
origin value
Fixed tick value or origin X 35 0.0 0.0
Y 36 0.0 0.0
ATOPLT VARIABLE PARAMETERS Page A-3
Note Box Positioning
--------------------
(X,Y) displacement of first X 22 5.0 2.0
note line from top left Y 23 8.0 4.0
corner of note box
Spacing between note lines 24 5.0 5.0
Character Sizes
---------------
Symbols used for ploting points 25 2.0 2.0
Axis titles X 15 5.0 5.0
Y 16 5.0 5.0
Plot title 17 5.0 5.0
Tick label 19 3.0 2.5
Exponents for log labels 39 2.5 2.5
Exponent powers for log labels 40 2.0 2.0
Program ID 44 3.0 2.0
Notes 21 3.0 3.0
APPENDIX B
CENTRING SYMBOLS
Listed below are the symbols plotted at the data points for
data sets numbered from 1 to 14.