2010-03-04 7 views
6

Chciałbym wykreślić średnie i standardowe błędy jako poziomą tabelę kontrolną, a chcę, aby średnia została posortowana.Jak narysować wykres z posortowanymi poziomymi paskami błędów (posortowane wykresy ze znakami błędów)?

Znalazłem sposób rysowania poziomych posortowanych wykresów za pomocą siatki, ale nie wiem, jak dodać znaki błędów. Poniżej znajdują się moje dane i kod R, który wymyśliłem.

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

Czy istnieje sposób dodania znaków błędu do tego wykresu? Jeśli nie, to jakąkolwiek sugestię, jak narysować wykres, który chcę w R?

Z góry dziękuję!

Odpowiedz

6

See R-Pomoc: 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

Jeśli to nie musi być kraty o to prosta funkcja, która wykorzystuje funkcjonalność zasady R, który jest dostarczany wraz z trzema argumentami: szerokość prętów (xv), długości (w górę i w dół) słupków błędu (z) i etykiety prętów na osi 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

Powiązane problemy