# [R] How to change the type of segments ends?

Gavin Simpson gavin.simpson at ucl.ac.uk
Fri Jul 7 18:24:29 CEST 2006

```On Fri, 2006-07-07 at 11:47 -0400, Lu, Jiang Jane wrote:
> Hi,
>
> I am trying to plot odds ratios and the corresponding confidence
> intervals in horizontal segments. It would be ideal if the confidence
> interval segment can be drawn with little vertical bars at both ends. I
> have tried very hard to change the type of ends by using 'lend'
> arguments, but cannot make it. I even tried 'arrows()', but still
> failed. Following is the code I use:
> ====================================================
> drug.or <- c(1.017,1.437,1.427,2.211)
> drug.orl <- c(0.715,1.075,1.103,1.696)
> drug.oru <- c(1.446,1.922,1.845,2.882)
>
> yaxis <- seq(1,4,by=1)
>
> plot(x=drug.or,y=yaxis,type='p',pch=17,xlim=c(0,3),axes=FALSE,
>      xlab='Odds Ratio',ylab='',main='Reference Group: A only')
> axis(1,at=seq(0,3,by=0.5),labels=paste(seq(0,3,by=0.5)))
> axis(2,at=yaxis,las=2)
>
>
> segments(x0=drug.orl,x1=drug.oru,y0=yaxis,y1=yaxis,col=4,lend=2)
>
> # or try
> #arrows(x0=drug.orl,x1=drug.oru,y0=yaxis,y1=yaxis,length=0.1,angle=0,cod
> e=3,col=4,lend=2)
>
> box()
> =====================================================
>
>
> Any comments or suggestions would be greatly appreciated.
>
>
> Jane

Hi Jane,

Thanks for the reproducible example. Why do you think lend will do what
you want? From ?par:

'lend' The line end style.  This can be specified as an integer or
string:

'0' and '"round"' mean rounded line caps [_default_];

'1' and '"butt"' mean butt line caps;

'2' and '"square"' mean square line caps.

As from R 2.3.0 this can be specified inline.

This is talking about line endings - do you want hard or soft line ends
or type of joins in line segments? It does not mean the type of line
endings you might get in Adobe Illustrator or Inkscape vector drawing
packages.

You were close with arrows:

drug.or <- c(1.017,1.437,1.427,2.211)
drug.orl <- c(0.715,1.075,1.103,1.696)
drug.oru <- c(1.446,1.922,1.845,2.882)

yaxis <- seq(1,4,by=1)

plot(x = drug.or, y = yaxis, pch=17, xlim = c(0,3), axes=FALSE,
xlab = 'Odds Ratio', ylab = '', main = 'Reference Group: A only')
labs <- seq(0, 3, by = 0.5)
axis(1, at = labs, labels = labs)
axis(2, at = yaxis, las = 2)
arrows(x0 = drug.orl, x1 = drug.oru, y0 = yaxis, y1 = yaxis, length=0.1,
code = 3, col = 4, angle = 90)

the angle argument is the key. See arrows? You don't need lend at all to
do what you want.

HTH

G

--
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
Gavin Simpson                 [t] +44 (0)20 7679 0522
ECRC & ENSIS, UCL Geography,  [f] +44 (0)20 7679 0565
Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/cv/
London, UK. WC1E 6BT.         [w] http://www.ucl.ac.uk/~ucfagls/
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%

```