2010-03-04 7 views
6

Ich möchte Mittel und Standardfehler als horizontales Balkendiagramm plotten, und ich will den Mittelwert sortiert.Wie zeichne ich ein Diagramm mit sortierten horizontalen Fehlerbalken (sortierte Balkenbilder mit Fehlermarkierungen)?

Ich habe den Weg gefunden, horizontal sortierte Balkendiagramme mit Gitter zu plotten, aber ich weiß nicht, wie man Fehlermarkierungen hinzufügt. Das Folgende sind meine Daten und der R-Code, den ich mir ausgedacht habe.

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

Gibt es eine Möglichkeit, diesem Diagramm Fehlermarkierungen hinzuzufügen? Wenn nicht, irgendeinen Vorschlag, wie man das Diagramm plant, das ich in R wollen?

Vielen Dank im Voraus!

Antwort

6

Siehe R-Hilfe: 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

Wenn es nicht hier Gitter werden muss ist eine einfache Funktion, die Basis R-Funktionalität verwendet wird, dass mit drei Argumenten geliefert: die Breiten der Balken (xv), die Längen (auf und ab) der Fehlerbalken (z) und die Beschriftungen für die Balken auf der y-Achse (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