2010-03-04 28 views
6

Me gustaría trazar los medios y los errores estándar como una tabla de barras horizontal, y quiero la media ordenada.Cómo dibujar un gráfico con barras de error horizontal ordenadas (gráficos de barras ordenados con marcas de error)?

He encontrado la manera de trazar diagramas de barras ordenados horizontalmente usando celosía, pero no sé cómo agregar marcas de error. Los siguientes son mis datos y el código R que se me ocurrió.

data <- structure(c(0.67, 0.67, 0.76, 0.66, 0.71, 0.6, 0.52, 0.6, 0.71, 0.76, 
0.76, 0.71, 0.6, 0.61, 0.9, 0.5, 0.58, 0.84, 0.68, 0.88, 
0.89, 0.96, 1, 0.95, 1, 1, 0.98, 0.78, 0.98, 1, 
1, 0.99, 1, 1, 0.95, 0.92, 1, 0.91, 1, 0.87, 
0.91, 0.72, 0.73, 0.55, 0.82, 0.87, 0.64, 0.75, 0.75, 1, 
0.81, 0.79, 1, 0.74, 0.57, 0.84, 1, 0.95, 0.78, 0.95), .Dim = c(20L, 3L), .Dimnames = list(
    c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", 
    "12", "13", "14", "15", "16", "17", "18", "19", "20"), c("A", 
    "B", "C"))) 

means <- apply(data, 2, mean) 

errors <- apply(data, 2, sd) 

plot.data <- data.frame(colnames(data), means, errors) 

colnames(plot.data) <- c("var", "mean", "error") 

library("lattice") 
plot.new() 

barchart(reorder(var, mean) ~ mean, plot.data, xlim = c(0, 1)) 

¿Hay alguna forma de agregar marcas de error a este gráfico? Si no, ¿alguna sugerencia sobre cómo trazar el gráfico que quiero en R?

¡Gracias de antemano!

Respuesta

6

Ver R-Ayuda: Adding error bars to lattice plots

prepanel.ci <- function(x, y, lx, ux, subscripts, ...) { 
    x <- as.numeric(x) 
    lx <- as.numeric(lx[subscripts]) 
    ux <- as.numeric(ux[subscripts]) 
    list(xlim = range(0, x, ux, lx, finite = TRUE)) 
} 


panel.ci <- function(x, y, lx, ux, subscripts, ...) { 
    x <- as.numeric(x) 
    y <- as.numeric(y) 
    lx <- as.numeric(lx[subscripts]) 
    ux <- as.numeric(ux[subscripts]) 
    panel.barchart(x, y, ...) 
    panel.arrows(lx, y, ux, y, col = 'black', 
       length = 0.25, unit = "native", 
       angle = 90, code = 3) 
} 

p <- barchart(reorder(var, mean) ~ mean, data=plot.data, 
       lx=plot.data$mean-plot.data$error, 
       ux=plot.data$mean+plot.data$error, 
       panel=panel.ci, 
       prepanel=prepanel.ci) 
print(p) 

lattice barchart with error bar http://img689.imageshack.us/img689/9011/errorbar.png

5

Si no tiene que ser enrejado aquí es una función simple que utiliza la funcionalidad de base de R, que se suministra con tres argumentos: el anchuras de las barras (xv), las longitudes (arriba y abajo) de las barras de error (z) y las etiquetas para las barras en el eje y (nn).

error.bars<-function(xv,z,nn){ 
par(las = 1) 
yv <- barplot(xv,horiz = TRUE,col="cyan",xlim=c(0,(max(xv)+max(z))),names=nn,xlab=deparse(substitute(xv))) 
g <- (max(yv)-min(yv))/(3*length(yv)) 
for (i in 1:length(yv)) { 
lines(c(xv[i]+z[i],xv[i]-z[i]),c(yv[i],yv[i])) 
lines(c(xv[i]+z[i],xv[i]+z[i]),c(yv[i]+g,yv[i]-g)) 
lines(c(xv[i]-z[i],xv[i]-z[i]),c(yv[i]+g,yv[i]-g)) 
}} 

plot.data <- plot.data[order(plot.data$mean),] # reorder data 
mean<-as.vector(plot.data$mean) 
se<-as.vector(plot.data$error) 
labels<-as.character(plot.data$var) 

error.bars(mean,se,labels) 

alt text

Cuestiones relacionadas