@Section
   @Title { Changing the overall appearance of the graph }
   @Tag { overall }
@Begin
@PP
The overall appearance of the graph is controlled by options to the
@Code "@Graph" symbol.  As usual, these options follow the @Code "@Graph"
symbol, with their values enclosed in braces; they may appear in any order,
and if omitted are assigned some sensible default value.
@PP
There is a @Code "style" option for controlling the overall style of the
graphs. @RawIndex { graphs (statistical) }
graphs.style @SubIndex { @Code style option }
style. @RawIndex { @Code "style" option }
style.in.graphs @SubIndex { in graphs }
axes. @Index { axes in graphs }
graph, whose value may be either {@Code "frame"}, {@Code "none"},
or {@Code "axes"}.  The default value is {@Code "frame"}, and it produces
a frame around the graph with ticks and labels along its left and bottom
edges, as in previous examples.  Value @Code "grid" is similar except
that the ticks are converted into grid lines crossing the entire
frame.  The {@Code "none"} style prints nothing (no frame, no ticks,
no labels), which is useful for producing graphs that don't look like
graphs, as it were.
@PP
If the other value, {@Code "axes"}, is chosen, two other options called
{@Code xorigin} and {@Code yorigin} become compulsory:
graphs. @RawIndex { graphs (statistical) }
graphs.xorigin @SubIndex { @Code xorigin option }
xorigin.graph @Index { @Code "xorigin" option (graphs) }
graphs. @RawIndex { graphs (statistical) }
graphs.yorigin @SubIndex { @Code yorigin option }
yorigin.graph @Index { @Code "yorigin" option (graphs) }
@ID @OneRow @Code @Verbatim {
-2p @Font @Graph
    style { axes }
    xorigin { 0 }
    yorigin { 0 }
    width { 12c }
    height { 7c }
    leftcaption { 90d @Rotate { counts (%) } }
    leftgap { 1.0c }
    belowcaption { time (min) }
    belowgap { 0c }
{
    @Data
        points { filledsquare }
        pairs { solid }
    { 0 0.0 1 4.8 2 7.0 3 15.2 4 19.8 5 20.0 6 21.0 7 25.0
      10 29.5 15 31.2 20 35.0 30 40.0 60 50.8
    }

    @Data
        points { square }
        pairs { solid }
    {
      0 0.0 1 3.7 1.5 43.1 2 99.1 3 85.6 4 69.1 5 47.0 6 44.1 7 40.8
      10 35.0 15 29.4 20 25.0 30 21.1 60 15.5
    }
}
}
We have requested a smaller font size for this graph as a whole by
preceding it with {@Code "-2p @Font"}, meaning two points smaller, and
we have used some other options which will be explained shortly.  The
resulting graph has an x axis and a y axis instead of a frame, like this:
@CD -2p @Font @Graph
    style { axes }
    xorigin { 0 }
    yorigin { 0 }
    width { 12c }
    height { 7c }
    leftcaption { 90d @Rotate { counts (%) } }
    leftgap { 1.0c }
    belowcaption { time (min) }
    belowgap { 0c }
{
    @Data
        points { filledsquare }
        pairs { solid }
    { 0 0.0 1 9.5 2 15.0 3 18.2 4 20.1 5 22.1 7 25.0
      10 28.3 15 31.2 20 35.0 30 40.0 60 50.8
    }

    @Data
        points { square }
        pairs { solid }
    {
      0 0.0 1 3.7 1.5 43.1 2 99.1 3 85.6 4 69.1 5 47.0 6 44.1 7 40.8
      10 35.0 15 29.4 20 25.0 30 21.1 60 15.5
    }
}
The point where the axes cross is ({@Code xorigin}, {@Code yorigin}).
@PP
Although @Code "@Graph" does not provide explicit support for
multiple axes, you can simulate them by overstriking two
separate graphs of equal size.  There is an @Code "@OverStrike"
overstrike. @Index @Code "@OverStrike"
symbol which overstrikes two objects, so
@ID @Code "@Graph { ... } @OverStrike @Graph { ... }"
will do the job.  Typically one of the graphs would have y ticks,
and the other would have r ticks (adjacent to the right-hand side of the
frame).
@PP
There are @Code "xlog" and @Code "ylog" options which produce
graphs. @RawIndex { graphs (statistical) }
graphs.xlog @SubIndex { @Code xlog option }
xlog.graph @Index { @Code "xlog" option (graphs) }
graphs. @RawIndex { graphs (statistical) }
graphs.ylog @SubIndex { @Code ylog option }
ylog.graph @Index { @Code "ylog" option (graphs) }
logarithmic.axes @Index { logarithmic axes in graphs }
logarithmic x and y axes:
@ID @OneRow @Code @Verbatim {
@Graph
    xlog { 10 }
    ylog { 10 }
{
    ...
}
}
The value is the base of the logarithm, usually 10 or 2, or
{@Code none} (the default) meaning not logarithmic.  Logarithms
to different bases differ only by a constant factor, so the main effect
of different bases is on the choice of ticks and labels.  An @Code "xlog"
option will be ignored if there are any negative or zero x data points,
x ticks, or {@Code "xorigin"} or {@Code "xmin"} options; and similarly
for {@Code "ylog"}.
@PP
There are @Code "width" and @Code "height" options for setting the size
graphs. @RawIndex { graphs (statistical) }
graphs.width @SubIndex { @Code width option }
width. @RawIndex { @Code "width" option }
width.in.graphs @SubIndex { in graphs }
graphs. @RawIndex { graphs (statistical) }
graphs.height @SubIndex { @Code height option }
height. @RawIndex { @Code "height" option }
height.in.graphs @SubIndex { in graphs }
of the total area enclosed:
@ID @OneRow @Code @Verbatim {
@Graph
    width { 6.0c }
    height { 4.0c }
{
    ...
}
}
This shows the default width and height, six centimetres and four
centimetres.  These lengths and others discussed below can be specified
using a variety of units of measurement (see Section {@NumberOf grsummary}
for the details).
@PP
Within the frame or axes, a small margin is kept free of data points.  The
size of this margin is controlled by @Code "xextra" and @Code "yextra"
graphs. @RawIndex { graphs (statistical) }
graphs.xextra @SubIndex { @Code xextra option }
xextra.graph @Index { @Code "xextra" option (graphs) }
graphs. @RawIndex { graphs (statistical) }
graphs.yextra @SubIndex { @Code yextra option }
yextra.graph @Index { @Code "yextra" option (graphs) }
options:
@ID @OneRow @Code @Verbatim {
@Graph
    xextra { 0.5c }
    yextra { 0.5c }
{
    ...
}
}
Setting @Code "xextra" to @Code "0.5c" (the default value if the
@Code style option is {@Code frame}) means that the smallest x value
will be placed 0.5 centimetres to the right of the left boundary, and
the largest will be placed 0.5 centimetres to the left of the right
boundary.  It is quite safe to set @Code "xextra" to @Code "0c" if
desired, and indeed this is the default value when @Code style is
{@Code axes} or {@Code none}.  The @Code "yextra" option works in
exactly the same way for y values.
@PP
The @Code "xdecreasing" option plots the x values in decreasing order
graphs. @RawIndex { graphs (statistical) }
graphs.xdecreasing @SubIndex { @Code xdecreasing option }
xdecreasing.graph @Index { @Code "xdecreasing" option (graphs) }
instead of increasing:
@ID @Code @Verbatim {
@Graph
    xdecreasing { yes }
    abovecaption { New South Wales road deaths, 1960--1990
(fatalities per 100 million vehicle km) }
{
    @Data
        points { plus }
        pairs { dashed }
    {
        1963 5.6  1971 4.3  1976 3.7  1979 3.4  1982 2.9  1985 2.3  1988 2.0
    }
}
}
produces
@CD @Graph
    xdecreasing { yes }
    abovecaption { New South Wales road deaths, 1960--1990
(fatalities per 100 million vehicle km) }
{
    @Data
        points { plus }
        pairs { dashed }
    {
        1963 5.6  1971 4.3  1976 3.7  1979 3.4  1982 2.9  1985 2.3  1988 2.0
    }
}
The value of @Code "xdecreasing" should be either @Code "no" (the default
value) or {@Code "yes"}.  A similar @Code "ydecreasing" option does the same
graphs. @RawIndex { graphs (statistical) }
graphs.ydecreasing @SubIndex { @Code ydecreasing option }
ydecreasing.graph @Index { @Code "ydecreasing" option (graphs) }
thing to the y axis.
@End @Section
