I would like to express my gratitude for those who answered and tried
to help my original question about plotting error bars within
Trellis.
Thanks to Marcel Baumgartner, Nick Ellis, Jean Adams, Steve Wofsy,
Patrick Connolly, Henrik Nielsen, Jim Pratt, Madeline Bauer, Frank
Harrel, Martin Maerchler, and John Maindonald.
- Original question:
Dear S-users:
I would like to plot in my graph both error bars (here the sample
standard deviation of the data or an estimate of the standard
deviation, e.g. the standard error) from X's and Y's. How would a
command-line script for this task look like?
Thanks for your attention and consideration.
- from Nick Ellis
x<-y<-1:10
plot(x,y)
errbar(x,y,y+x/10,y-x/10,x+y/20,x-y/10,add=T)
This is the modified function
errbar <-
function(x, y, yplus, yminus, xplus, xminus, cap = 0.015, xlab =
as.character(
substitute(x)), ylab = as.character(substitute(y)), add = F, lty = 1,
ylim, lwd = 1, ...)
{
if(missing(ylim))
ylim <- range(y, yplus, yminus, na.rm = T)
if(!add)
plot(x, y, ylim = ylim, xlab = xlab, ylab = ylab, ...)
xcoord <- par()$usr[1:2]
segments(x, yminus, x, yplus, lty = lty, lwd = lwd)
smidge <- (cap * (xcoord[2] - xcoord[1]))/2
segments(x - smidge, yminus, x + smidge, yminus, lwd = lwd)
segments(x - smidge, yplus, x + smidge, yplus, lwd = lwd)
if(!missing(xplus)) {
segments(xminus, y, xplus, y, lty = lty, lwd = lwd)
ycoord <- par()$usr[3:4]
smidge <- (cap * (ycoord[2] - ycoord[1]))/2
segments(xminus, y - smidge, xminus, y + smidge, lwd = lwd)
segments(xplus, y - smidge, xplus, y + smidge, lwd = lwd)
}
}
- from Jean Adams
x <- sample(5, 100, T)
y <- rnorm(100)
uniq.x <- sort(unique(x))
mean.y <- tapply(y, x, mean)
sd.y <- sqrt(tapply(y, x, var))
error.bar(uniq.x, mean.y, sd.y)
- from Jim Pratt
errorbar<-function(x, y, plusmin, size = 0.2)
{
plot(x, y, ylim = c(min(y - plusmin), max(y +
plusmin)), type = "b")
segments(x, y + plusmin, x, y - plusmin)
par.cin.x <- par()$cin[1]
segments(x - size * par.cin.x, y - plusmin, x +
size * par.cin.x, y - plusmin)
segments(x - size * par.cin.x, y + plusmin, x +
size * par.cin.x, y + plusmin)
}
--
___________________
Mario Aigner-Torres
Inst. of Mineralogy & Petrography (IMP)
Swiss Federal Inst. of Technology (ETH)
Sonneggstrasse 5
CH - 8092 Zurich
Switzerland
email: mario@erdw.ethz.ch
phone: 41-1-632 3803
fax: 41-1-632 1088
|