Hi all,
I've read the emails of Dan, Deepayan and Sundar about adding error bars to
the lattice plots (
https://stat.ethz.ch/pipermail/r-help/2006-October/114883.html), but I still
have the problem when I want to adding error bars to barchart. I tried both
the solution of Deepayan and Sundar but without luck. Here is my code (I
changed prepanel.ci and panel.ci a little to plot bars vertically):
###################### Sundar's solution ###############################
prepanel.ci <- function(x, y, ly, uy, subscripts, ...) {
y <- as.numeric(y)
ly <- as.numeric(ly[subscripts])
uy <- as.numeric(uy[subscripts])
list(ylim = range(y, uy, ly, finite = TRUE))
}
panel.ci <- function(x, y, ly, uy, subscripts,
groups = NULL, pch = 16, ...) {
x <- as.numeric(x)
y <- as.numeric(y)
ly <- as.numeric(ly[subscripts])
uy <- as.numeric(uy[subscripts])
par <- if(is.null(groups))"plot.symbol" else
"superpose.symbol"
sym <- trellis.par.get(par)
col <- sym$col
groups <- if(!is.null(groups)) {
groups[subscripts]
} else {
rep(1, along = x)
}
ug <- unique(groups)
for(i in seq(along = ug)) {
subg <- groups == ug[i]
y.g <- y[subg]
x.g <- x[subg]
ly.g <- ly[subg]
uy.g <- uy[subg]
panel.abline(h = unique(y.g), col = "grey")
panel.arrows(ly.g, y.g, uy.g, y.g, col = 'black',
length = 0.25, unit = "native",
angle = 90, code = 3)
panel.barchart(x.g, y.g, pch = pch, col = col[i], ...)
}
}
all = barchart(
Score ~ Methods | Score.Name * RNA.Type,
data = benchmark,
box.ratio = 1.2,
xlab = 'Methods',
ylab = 'Percentage',
groups = Seq.Number,
layout = c(2, 5), # 2 columns per row
between = list( y = 0.5, x = 0 ),
# par.settings = list(fontsize=list(text=8)),
## specify the colors used for bars
par.settings = list(fontsize=list(text=8), superpose.polygon = list(border
= 'black', col = c('white', 'gray', 'black'))),
par.strip.text = list(cex=0.9),
auto.key = list(space = 'top', columns = 3, cex = 0.7),
# key = key.variety,
# index.cond = list(c('tRNA', '5S rRNA', 'SRP RNA',
'RNase P', '16S
rRNA')),
# index.cond = list(rep(1,6)),
# ylim = my.ylim,
scales = list(x = list(rot = 45), y=list(tck = 0.4, rot = 0, relation
'free')),
ly = benchmark$Score - benchmark$Error,
uy = benchmark$Score + benchmark$Error,
prepanel = prepanel.ci,
panel.groups = panel.ci
)
################################ Deepayan's solution
################################
prepanel.ci <- function(x, y, ly, uy, subscripts, ...) {
y <- as.numeric(y)
ly <- as.numeric(ly[subscripts])
uy <- as.numeric(uy[subscripts])
list(ylim = range(y, uy, ly, finite = TRUE))
}
panel.ci <- function(x, y, ly, uy, subscripts, ...) {
x <- as.numeric(x)
y <- as.numeric(y)
ly <- as.numeric(ly[subscripts])
uy <- as.numeric(uy[subscripts])
panel.barchart(x, y, ...)
panel.arrows(x, ly, x, uy, col = 'black',
length = 0.1, unit = "native",
angle = 90, code = 3)
}
all = barchart(
Score ~ Methods | Score.Name * RNA.Type,
data = benchmark,
box.ratio = 1.2,
xlab = 'Methods',
ylab = 'Percentage',
groups = Seq.Number,
layout = c(2, 5), # 2 columns per row
between = list( y = 0.5, x = 0 ),
# par.settings = list(fontsize=list(text=8)),
## specify the colors used for bars
par.settings = list(fontsize=list(text=8), superpose.polygon = list(border
= 'black', col = c('white', 'gray', 'black'))),
par.strip.text = list(cex=0.9),
auto.key = list(space = 'top', columns = 3, cex = 0.7),
# key = key.variety,
# index.cond = list(c('tRNA', '5S rRNA', 'SRP RNA',
'RNase P', '16S
rRNA')),
# index.cond = list(rep(1,6)),
# ylim = my.ylim,
scales = list(x = list(rot = 45), y=list(tck = 0.4, rot = 0, relation
'free')),
ly = benchmark$Score - benchmark$Error,
uy = benchmark$Score + benchmark$Error,
prepanel = prepanel.ci,
panel.groups = panel.ci,
panel = panel.superpose )
Sundar's solution gives me the exact same original plot without error
bars, and Deepayan's solution gives me a messy plot. Did I mess up
anything in these two solutions? I'd appreciate any help from you
experts. Thanks
--
Best,
Zhenjiang
[[alternative HTML version deleted]]