Agregue barras de error para mostrar la desviación estándar en un diagtwig en R

Para cada valor X calculé el valor Y medio y la desviación estándar ( sd ) de cada valor Y.

 x = 1:5 y = c(1.1, 1.5, 2.9, 3.8, 5.2) sd = c(0.1, 0.3, 0.2, 0.2, 0.4) plot (x, y) 

¿Cómo puedo usar la desviación estándar para agregar barras de error a cada punto de datos de mi diagtwig?

Aparece un problema con la solución csgillespie, cuando tiene un eje X logarítmico. Tendrás una longitud diferente de barras pequeñas a la derecha y a la izquierda (el épsilon sigue los valores de x).

Debería utilizar mejor la función Hmisc paquete Hmisc :

 d = data.frame( x = c(1:5) , y = c(1.1, 1.5, 2.9, 3.8, 5.2) , sd = c(0.2, 0.3, 0.2, 0.0, 0.4) ) ##install.packages("Hmisc", dependencies=T) library("Hmisc") # add error bars (without adjusting yrange) plot(d$x, d$y, type="n") with ( data = d , expr = errbar(x, y, y+sd, y-sd, add=T, pch=1, cap=.1) ) # new plot (adjusts Yrange automatically) with ( data = d , expr = errbar(x, y, y+sd, y-sd, add=F, pch=1, cap=.015, log="x") ) 

Una solución con ggplot2 :

 qplot(x,y)+geom_errorbar(aes(x=x, ymin=y-sd, ymax=y+sd), width=0.25) 

enter image description here

Además de la respuesta de @csgillespie, los segments también se vectorizan para ayudar con este tipo de cosas:

 plot (x, y, ylim=c(0,6)) segments(x,y-sd,x,y+sd) epsilon <- 0.02 segments(x-epsilon,y-sd,x+epsilon,y-sd) segments(x-epsilon,y+sd,x+epsilon,y+sd) 

enter image description here

Puede usar segments para agregar las barras en gráficos base. Aquí epsilon controla la línea en la parte superior e inferior de la línea.

 plot (x, y, ylim=c(0, 6)) epsilon = 0.02 for(i in 1:5) { up = y[i] + sd[i] low = y[i] - sd[i] segments(x[i],low , x[i], up) segments(x[i]-epsilon, up , x[i]+epsilon, up) segments(x[i]-epsilon, low , x[i]+epsilon, low) } 

Como señala @thelatemail, realmente debería haber usado llamadas a funciones vectorizadas:

 segments(x, y-sd,x, y+sd) epsilon = 0.02 segments(x-epsilon,y-sd,x+epsilon,y-sd) segments(x-epsilon,y+sd,x+epsilon,y+sd) 

enter image description here

Puedes usar arrows :

 arrows(x,y-sd,x,y+sd, code=3, length=0.02, angle = 90) 
Intereting Posts