¿Cómo agregar la línea de media a un gráfico de densidad agrupado en R?
Estoy tratando de dibujar un gráfico de densidad agrupado y agregar la línea media de cada gráfico; aquí está el código
data <- data.frame(
Accuracy=abs(rnorm(140)),
Species=c(rep("A.All",20),rep("B. double",60),rep("C.single",60),
rep("D.All",20),rep("E.double",60),rep("F.single",60)),
Modality=c(rep("All,w0",10),rep("double1,w0",10),rep("double2,w0",10),rep("double3,w0",10),
rep("single1,w0",10),rep("single2,w0",10),rep("single3,w0",10),
rep("All,w2",10),rep("double1,w2",10),rep("double2,w2",10),rep("double3,w2",10),
rep("single1,w2",10),rep("single2,w2",10),rep("single3,w2",10))
)
p<-ggplot(data, aes(x=Accuracy, fill=Modality)) +
geom_density(alpha=0.4)+
facet_wrap(. ~ Species) +
xlab("Accuracy") + ylab("Density")
library(plyr)
mu <- ddply(data, "Modality", summarise, grp.mean=mean(Accuracy))
head(mu)
<h1>Agregar líneas medias</h1>
a<-p+geom_vline(data=mu, aes(xintercept=grp.mean, color=Modality),
linetype="dashed")+ xlab("Accuracy") + ylab("Density")
Sin embargo, según la figura de salida en
aquí, las líneas medias son absolutamente incorrectas. Por ejemplo, para la primera imagen en la parte superior izquierda, debería haber dos líneas para dos gráficos de densidad, pero se crean un par de líneas y se repiten para todas las figuras.
davy.ai
Para solucionar el problema de las líneas medias incorrectas en el gráfico de densidad agrupada, debemos modificar el código. En lugar de utilizar
ddply()
del paqueteplyr
, podemos usar el paquetedplyr
para agrupar los datos porSpecies
yModality
y calcular la media deAccuracy
. Luego, podemos unir estos datos resumidos con los datos originales utilizando la funciónleft_join()
del paquetedplyr
. Finalmente, podemos utilizar la funcióngeom_segment()
enggplot2
para crear líneas medias separadas para cada grupo.Aquí está el código modificado:
“`{r}
library(dplyr)
library(ggplot2)
data <- data.frame(
Accuracy = abs(rnorm(140)),
Species = c(rep(“A.All”,20),rep(“B. double”,60),rep(“C.single”,60),
rep(“D.All”,20),rep(“E.double”,60),rep(“F.single”,60)),
Modality = c(rep(“All,w0”,10),rep(“double1,w0”,10),rep(“double2,w0”,10),rep(“double3,w0”,10),
rep(“single1,w0”,10),rep(“single2,w0”,10),rep(“single3,w0”,10),
rep(“All,w2”,10),rep(“double1,w2”,10),rep(“double2,w2”,10),rep(“double3,w2”,10),
rep(“single1,w2”,10),rep(“single2,w2”,10),rep(“single3,w2”,10))
)
Calcular medias de grupo
mu <- data %>%
group_by(Species, Modality) %>%
summarise(grp.mean = mean(Accuracy))
Unir datos resumidos con datos originales
data <- data %>%
left_join(mu, by = c(“Species”, “Modality”))
Graficar gráfico de densidad agrupada con líneas medias
p <- ggplot(data, aes(x = Accuracy, fill = Modality)) +
geom_density(alpha = 0.4) +
facet_wrap(. ~ Species) +
xlab(“Accuracy”) + ylab(“Density”)
a <- p +
geom_segment(data = mu, aes(x = grp.mean, xend = grp.mean, y = 0, yend = 1,
color = Modality), linetype = “dashed”) +
xlab(“Accuracy”) + ylab(“Density”)
a # mostrar el gráfico
“`
Este código debería generar el gráfico de densidad agrupada correcto con líneas medias separadas para cada grupo.