2010-03-04 21 views
6

Je voudrais tracer les moyennes et les erreurs standard sous la forme d'un graphique à barres horizontal, et je veux que la moyenne soit triée.Comment dessiner un graphique avec des barres d'erreur horizontales triées (diagrammes à barres triés avec des marques d'erreur)?

J'ai trouvé le moyen de tracer des diagrammes horizontaux triés en utilisant un treillis, mais je ne sais pas comment ajouter des marques d'erreur. Ce qui suit sont mes données et le code R que j'ai trouvé.

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)) 

Est-il possible d'ajouter des marques d'erreur à ce graphique? Si non, toute suggestion sur la façon de tracer le tableau que je veux dans R?

Merci d'avance!

Répondre

6

Voir R-Help: 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 elle ne doit pas être treillis ici est une fonction simple qui utilise la fonctionnalité de base de R, qui est fourni avec trois arguments: le les largeurs des barres (xv), les longueurs (haut et bas) des barres d'erreur (z) et les étiquettes des barres sur l'axe 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