[R] arrow egdes and lty

Martin Maechler maechler at stat.math.ethz.ch
Mon Nov 14 12:00:17 CET 2011

>>>>> Ted Harding <ted.harding at wlandres.net>
>>>>>     on Mon, 14 Nov 2011 10:39:35 +0000 writes:

    > On 14-Nov-11 09:57:52, Matthias Gondan wrote:
    >> Dear R developers,
    >> I want to draw an arrow in a figure with lty=2. The lty
    >> argument also affects the edge of the arrow, which is
    >> unfortunate. Feature or bug?
    >> Is there some way to draw an arrow with intact edge,
    >> still with lty=2?
    >> Example code:
    >> plot(1:10) arrows(4, 5, 6, 7, lty=2)
    >> Best wishes, Matthias

    > According to ?arrows, it would seem that there is no
    > provision to draw the arrow shaft and the arrow head using
    > different line types with a single call to arrows().

    > To the extent that this represents the absence of a
    > desirable feature (since you desire it), I would designate
    > it as a bug.

    > It can be done with two calls to arrows(), as follows:

    >   plot(1:10) arrows(4, 5, 6, 7, lty=2, length=0)
    > arrows(5.99, 6.99, 6, 7, lty=1)

Another possibility is to use p.arrows() from package 'sfsmisc'
which draws "nice arrow heads";
and if you like to keep them simple, do *not* fill them :



example(arrows) # - show R's standard arrows()

## The example from the p.arrows()  help page:
plot(x,y, main="p.arrows(.)")
p.arrows(x[s], y[s], x[s+1], y[s+1], col= 1:3, fill = "dark blue")

## not filling the arrow heads -- and using  lty :
plot(x,y, main="p.arrows(.)")
p.arrows(x[s], y[s], x[s+1], y[s+1], col= 1:3, lty = 2, fill = NA)

    > Of course, the first could also be done using lines().

    > Ted.

More information about the R-help mailing list