with summaryse standard means linetype ggplot geom_errorbar error bars barplot averages and r plot ggplot2

summaryse - plot mean and standard error in r



Cómo hacer esquivar en geom_bar de acuerdo con esquivar en geom_errorbar, geom_point (2)

Tengo un conjunto de datos donde las mediciones se realizan para diferentes grupos en diferentes días.

Quiero tener barras lado a lado que representen las mediciones en los diferentes días para los diferentes grupos con los grupos de barras espaciados de acuerdo con el día de medición con barras de error superpuestas a ellos.

Tengo problemas para hacer que la geom_bar en geom_bar concuerde con la esquiva en geom_errorbar .

Aquí hay un código simple:

days = data.frame(day=c(0,1,8,15)); groups = data.frame(group=c("A","B","C","D", "E"), means=seq(0,1,length=5)); my_data = merge(days, groups); my_data$mid = exp(my_data$means+rnorm(nrow(my_data), sd=0.25)); my_data$sigma = 0.1; png(file="bar_and_errors_example.png", height=900, width=1200); plot(ggplot(my_data, aes(x=day, weight=mid, ymin=mid-sigma, ymax=mid+sigma, fill=group)) + geom_bar (position=position_dodge(width=0.5)) + geom_errorbar (position=position_dodge(width=0.5), colour="black") + geom_point (position=position_dodge(width=0.5), aes(y=mid, colour=group))); dev.off();

En el gráfico, los segmentos de error aparecen con un desplazamiento fijo desde su barra (lo sentimos, no se permiten tramas para los novatos, incluso si ggplot2 es el sujeto).

Cuando binwidth se ajusta en geom_bar , el desplazamiento no es fijo y cambia día a día.

Tenga en cuenta que geom_errorbar y geom_point esquivan en tándem. ¿Cómo hago para que geom_bar de acuerdo con los otros dos?

Cualquier ayuda apreciada.


Los problemas de alineación se deben, en parte, a que sus barras no representan los datos que pretende. Las siguientes líneas se alinean correctamente:

ggplot(my_data, aes(x=day, weight=mid, ymin=mid-sigma, ymax=mid+sigma, fill=group)) + geom_bar (position=position_dodge(), aes(y=mid), stat="identity") + geom_errorbar (position=position_dodge(width=0.9), colour="black") + geom_point (position=position_dodge(width=0.9), aes(y=mid, colour=group))


El primer cambio reformulé el código de acuerdo con la guía de estilo R avanzada .

days <- data.frame(day=c(0,1,8,15)) groups <- data.frame( group=c("A","B","C","D", "E"), means=seq(0,1,length=5) ) my_data <- merge(days, groups) my_data$mid <- exp(my_data$means+rnorm(nrow(my_data), sd=0.25)) my_data$sigma <- 0.1

Ahora, cuando miramos los datos, vemos que ese día es un factor y que todo lo demás es igual.

str(my_data)

Para eliminar el espacio en blanco de la trama, convertí la columna del día en factores. COMPRUEBE que los niveles estén en el orden correcto antes de continuar.

my_data$day <- as.factor(my_data$day) levels(my_data$day)

El siguiente cambio que hice fue definir y en tus argumentos aes . Como estoy seguro de que sabe, esto le permite a ggplot saber dónde buscar los valores y. Luego cambié el argumento de posición para "esquivar" y agregué el argumento stat="identity" . El argumento "identity" le dice a ggplot que trace y en x. geom_errorbar hereda la posición de esquivar de geom_bar para que puedas dejarlo sin especificar, pero geom_point no, por lo que debes especificar ese valor. El Dodge predeterminado es position_dodge(.9) .

ggplot(data = my_data, aes(x=day, y= mid, ymin=mid-sigma, ymax=mid+sigma, fill=group)) + geom_bar(position="dodge", stat = "identity") + geom_errorbar( position = position_dodge(), colour="black") + geom_point(position=position_dodge(.9), aes(y=mid, colour=group))