[EMAIL PROTECTED] wrote:
I' ve seen that several people are looking for a function that creates a
barplot with an error indicators (I was one of them myself). Maybe you will
find the following code helpful (There are some examples how to use it at
the end):


# Creates a barplot. #bar.plot() needs a datavector for the height of bars and a error
#indicator for the interval #many of the usual R parameters can be set: e.g. ylim, main, col, etc.
#The direction of the error indicator can be specified as "bo" for both,
"lo" lower, "up" #upper
#The width of the indicator hat is set as a percentage of the x-width of the
plot:e.g. *hat=0.05


bar.plot<-function(data, err.ind, ind.side=NA, hat=NA, ylim=c(0,
max(data+err.ind,  na.rm=TRUE)*1.2), col=NA, xlab="your x-lab",  ylab="your
y-lab", main="your main",  names.arg=NA, space=0.2){
if (is.na(ind.side)){
ind.side<-"up"}    #only upper error indicator (default), else: "lo" or "bo"
if (is.na(hat)){
hat<-0.01}   #fraction of the x axis that defines the size of the error
indicator hat
if (is.na(col)){col<-"white"} #the default color is white
x.cor<-barplot(data, ylim=ylim, xlab=xlab, ylab=ylab, main=main,
names.arg=names.arg,   col=col, space=space)
smidge<-diff(par("usr")[1:2])*hat
up.ind<-data+err.ind
lo.ind<-data-err.ind
segments(0,0,x.cor,0)   # draws X-Axis
if (ind.side=="up"){
segments(x.cor, data, x.cor, up.ind)
segments(x.cor, up.ind, x.cor+smidge, up.ind)
segments(x.cor, up.ind, x.cor-smidge, up.ind)
}else{
if (ind.side=="bo"){
segments(x.cor, data, x.cor, up.ind)
segments(x.cor, up.ind, x.cor+smidge, up.ind)
segments(x.cor, up.ind, x.cor-smidge, up.ind)
segments(x.cor, data, x.cor, lo.ind)
segments(x.cor, lo.ind, x.cor+smidge, lo.ind)
segments(x.cor, lo.ind, x.cor-smidge, lo.ind)
}else{
segments(x.cor, data, x.cor, lo.ind)
segments(x.cor, lo.ind, x.cor+smidge, lo.ind)
segments(x.cor, lo.ind, x.cor-smidge, lo.ind)
}
}
}


#Examples par(mfrow=c(2,2))

data<-c(3.2, 3.3, 3.6, 4, 3.1, 3.3, 3.1, 4.5, 3.2, 3.3, 3.1, 3.4)
se<-sqrt(data)
bar.plot(data, se) #easy example

data<-c(3.2, 3.3, 3.6, 4, 3.1, 3.3, 3.1, 4.5, 3.2, 3.3, 3.1, 3.4)
se<-c(sqrt(data))
bar.plot(data, se,ind.side="lo", ylim=c(0, 10), col="lavender", space=0.25,
hat=0)


data<-c(15, 15, 19, 22)
se<-c(3, 5, 6, 4.5)
nam<-c("L.c","O.v","C.i","L.u")
bar.plot(data, se, col="orange", ind.side="bo", hat=0.05, main="",
xlab="species", ylab="CT  conc.")

data<-c(4,5,1,1.3,6,7.1,5,2.6)
se<-c(sqrt(data))
nam<-rep(c("C","T"),4)
spa<-rep(c(1.5, 0.2),4)
col<-rep(c("green","red"),4)
bar.plot(data, se, col=col, ind.side="up", main="Trees !", ylab="CT conc.",
space=spa,  names.arg=nam)





***********************************************************************
Dieter H�ring
Eidg. Forschungsanstalt f�r Agraroekologie und Landbau (FAL)
Reckenholzstrasse 191
8046 Z�rich

Tel.       01 / 377 71 62
FAX      01 / 377 72 01
mailto:[EMAIL PROTECTED]
www.reckenholz.ch


Bar charts have many problems as pointed out in Bill Cleveland's book Elements of Graphing Data. Bar charts with error bars have even more problems. I prefer dot plots with error bars. The Dotplot function in the Hmisc package will make such graphs. Hmisc's xYplot will do likewise for line graphs, including an option for error bands and shaded error bands.


--
Frank E Harrell Jr   Professor and Chair           School of Medicine
                     Department of Biostatistics   Vanderbilt University

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to