Arbitrary arrows can be placed on a plot using the arrow command.
Syntax:
set arrow {<tag>} {from <position>} {to|rto <position>} { {arrowstyle | as <arrow_style>} | {nohead | head | heads} {size <length>,<angle>} {filled | nofilled} {front | back} { {linestyle | ls <line_style>} | {linetype | lt <line_type>} {linewidth | lw <line_width} } } unset arrow {<tag>} show arrow {<tag>}
<tag> is an integer that identifies the arrow. If no tag is given, the lowest unused tag value is assigned automatically. The tag can be used to delete or change a specific arrow. To change any attribute of an existing arrow, use the arrow command with the appropriate tag and specify the parts of the arrow to be changed.
The <position>s are specified by either x,y or x,y,z, and may be preceded by `first`, `second`, `graph`, or `screen` to select the coordinate system. Unspecified coordinates default to 0. The endpoints can be specified in one of four coordinate systems—`first` or `second` axes, `graph` or `screen`. See `coordinates` for details. A coordinate system specifier does not carry over from the "from" position to the "to" position. Arrows outside the screen boundaries are permitted but may cause device errors. If the endpoint is specified by "rto" instead of "to" it is drawn relatively to the start point.
Specifying `nohead` produces an arrow drawn without a head—a line segment. This gives you yet another way to draw a line segment on the plot. By default, arrows have heads. Specifying `heads` draws arrow heads on both ends of the line.
Head size can be controlled by `size <length>,<angle>`, where <length> defines length of each branch of the arrow head and <angle> the angle (in degrees) they make with the arrow. <Length> is in x-axis units; this can be changed by `first`, `second`, `graph` or `screen` before the <length>; see `coordinates` for details.
Specifying `filled` produces filled arrow heads (if heads are used). Filling is supported on filled-polygon capable terminals, see help of pm3d for their list, otherwise the arrow heads are closed but not filled. Further, filling is obviously not supported on terminals drawing arrows by their own specific routines, like `fig`, `metafont`, `metapost`, `latex` or `tgif`.
The line style may be selected from a user-defined list of line styles (see `set style line`) or may be defined here by providing values for <line_type> (an index from the default list of styles) and/or <line_width> (which is a multiplier for the default width).
Note, however, that if a user-defined line style has been selected, its properties (type and width) cannot be altered merely by issuing another arrow command with the appropriate index and `lt` or `lw`.
If `front` is given, the arrow is written on top of the graphed data. If `back` is given (the default), the arrow is written underneath the graphed data. Using `front` will prevent an arrow from being obscured by dense data.
Examples:
To set an arrow pointing from the origin to (1,2) with user-defined style 5, use:
set arrow to 1,2 ls 5
To set an arrow from bottom left of plotting area to (-5,5,3), and tag the arrow number 3, use:
set arrow 3 from graph 0,0 to -5,5,3
To change the preceding arrow to end at 1,1,1, without an arrow head and double its width, use:
set arrow 3 to 1,1,1 nohead lw 2
To draw a vertical line from the bottom to the top of the graph at x=3, use:
set arrow from 3, graph 0 to 3, graph 1 nohead
To draw a vertical arrow with T-shape ends, use:
set arrow 3 from 0,-5 to 0,5 heads size screen 0.1,90
To draw an arrow relatively to the start point, where the relative distances are given in graph coordinates, use:
set arrow from 0,-5 rto graph 0.1,0.1
To delete arrow number 2, use:
unset arrow 2
To delete all arrows, use:
unset arrow
To show all arrows (in tag order), use:
show arrow
See also arrows demos.