@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
style.graph @Index { @Code "style" option of @Code "@Graph" }
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.  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:
@ID @OneRow @Code {
"-2p @Font @Graph"
"    style { axes }"
"    xorigin { 0 }"
"    yorigin { 0 }"
"    width { 12 cm }"
"    height { 7 cm }"
"    leftcaption { 90d @Rotate { counts (%) } }"
"    leftgap { 1.0 cm }"
"    belowcaption { time (min) }"
"    belowgap { 0 cm }"
"{"
"    @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 { 12 cm }
    height { 7 cm }
    leftcaption { 90d @Rotate { counts (%) } }
    leftgap { 1.0 cm }
    belowcaption { time (min) }
    belowgap { 0 cm }
{
    @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
logarithmic.axes @Index { logarithmic axes in graphs }
logarithmic x and y axes:
@ID @OneRow @Code {
"@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
of the total area enclosed:
@ID @OneRow @Code {
"@Graph"
"    width { 6.0 cm }"
"    height { 4.0 cm }"
"{"
"    ..."
"}"
}
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"
options:
@ID @OneRow @Code {
"@Graph"
"    xextra { 0.5 cm }"
"    yextra { 0.5 cm }"
"{"
"    ..."
"}"
}
Setting @Code "xextra" to @Code "0.5 cm" (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 "0 cm" 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
instead of increasing:
@ID @Code {
"@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
thing to the y axis.
@End @Section
