Comment dessiner un graphique avec des barres d'erreur horizontales triées (barreaux triés avec des marques d'erreur)?

StackOverflow https://stackoverflow.com/questions/2381618

  •  24-09-2019
  •  | 
  •  

Question

Je voudrais tracer des moyens et des erreurs standard en tant que bar à barreau horizontal, et je veux que la moyenne soit triée.

J'ai trouvé le moyen de tracer des barrarbacs trizontaux horizontaux à l'aide du réseau, mais je ne sais pas comment ajouter des marques d'erreur. Voici 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))

Existe-t-il un moyen d'ajouter des marques d'erreur à ce graphique? Sinon, une suggestion sur la façon de tracer le graphique que je veux dans R?

Merci d'avance!

Était-ce utile?

La solution

Voir R-Help: Ajout de barres d'erreur aux parcelles de réseau

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

Autres conseils

S'il n'a pas besoin d'être un réseau, voici une fonction simple qui utilise la fonctionnalité de base R, qui est fournie avec trois arguments: les largeurs des barres (xv), les longueurs (de haut en bas) des barres d'erreur (z) et les étiquettes pour les barres de 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top