@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. 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