As you are using function barplot2()
from library gplots
, will give example using this approach.
First, made barplot as given in help file of barplot2()
function. ci.l
and ci.u
are fake confidence interval values. Barplot should be saved as object.
hh <- t(VADeaths)[1:2, 5:1]
mybarcol <- "gray20"
ci.l <- hh * 0.85
ci.u <- hh * 1.15
mp <- barplot2(hh, beside = TRUE,
col = c("grey12", "grey82"),
legend = colnames(VADeaths)[1:2], ylim = c(0, 100),
cex.names = 1.5, plot.ci = TRUE, ci.l = ci.l, ci.u = ci.u)
If you look on object mp
, it contains x coordinates for all bars.
mp
[,1] [,2] [,3] [,4] [,5]
[1,] 1.5 4.5 7.5 10.5 13.5
[2,] 2.5 5.5 8.5 11.5 14.5
Now I use upper confidence interval values to calculate coordinates for y values of segments. Segments will start at position that is 1 higher then the end of confidence intervals. y.cord
contains four rows - first and second row correspond to first bar and other two rows to second bar. Highest y value is calculated from the maximal values of confidence intervals for each bar pair.
x.cord
values just repeat the same values which are in mp
object, each 2 times.
y.cord<-rbind(c(ci.u[1,]+1),c(apply(ci.u,2,max)+5),
c(apply(ci.u,2,max)+5),c(ci.u[2,]+1))
x.cord<-apply(mp,2,function(x) rep(x,each=2))
After barplot is made use sapply()
to make five line segments (because this time there are 5 groups) using calculated coordinates.
sapply(1:5,function(x) lines(x.cord[,x],y.cord[,x]))
To plot texts above the segments calculate x and y coordinates, where x is middle point of two bar x values and y value is calculated from the maximal values of confidence intervals for each bar pair plus some constant. Then use function text()
to add information.
x.text<-colMeans(mp)
y.text<-apply(ci.u,2,max)+7
text(c("*","**","***","NS","***"),x=x.text,y=y.text)
bar.group
from theagricolae
package which puts the letters on for you. – Leisterbarplot
, you can store the centre points of bars likebarstore <- barplot(1:3)
. To verify, that this works, tryabline(v=barstore)
and note that the vertical lines all cut through the centre of the bars. Usingsegments
you may be able to use these stored points to draw your comparison/interaction lines. – Tonita