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

Marc Schwartz (via MN) mschwartz at mn.rr.com
Fri Jul 7 18:08:49 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()
> =====================================================

Try this using 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(drug.or, 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)

arrows(drug.orl, yaxis, drug.oru, yaxis, angle=90,
length=0.1, code=3, col=4, lend=2)

You need to specify an angle of 90 degrees to get the arrow heads to be
perpendicular to the primary line segment. An angle of 0 superimposes
the heads on the primary line segment, so they don't show.

HTH,

Marc Schwartz

```