Larga historia corta, corrí un montón de simulaciones estocásticas para cada uno de los 15 grupos, y tengo un entero por grupo que necesito agregar a cada violín en la trama, y parece que no puede averiguar cómo hacerlo. Aquí hay un ejemplo reproducible:

# Making data
df <- data.frame(c(rep(1,10), rep(2,10), rep(3,10)), sample.int(100, 30), c(rep(85,10), rep(60,10), rep(55,10)))
colnames(df) <- c("Group", "Data", "Extra")

# Grouping data
df$Group <- as.factor(df$Group)

# Plotting
Violin2 <- ggplot(data = df, aes(x = Group, y = Data))+
  geom_violin(aes(fill = Group, color = Group))+
  stat_summary(aes(y = Data), fun=mean, geom="point", color = "navyblue", shape = 17, size = 3)+
  stat_summary(aes(y = Data), fun=median, geom="point", color = "black", shape = 16, size = 3)
  #geom_point(aes(y = Extra, color = "#00BB66", shape = 16, size = 3)+
Violin2

Así que aquí, estoy diciendo que dentro de la DF, hay tres grupos: 1, 2 y 3, que se aplican a la columna "Datos". Lo que necesito agregar, son los enteros de la columna "Extra" de la DF, como puntos únicos en cada violín (por lo que los tres enteros serían 85, 60 y 55).

Inicialmente, intenté agregar una capa de Geom_Point, y pensé que se agruparía adicional por grupo, al igual que los datos, pero eso no funcionaba (error: valor discreto suministrado a escala continua).

He estado buscando mucho aquí, y no puedo encontrar una solución, ¡así que algún consejo sería muy apreciado! ¡Muchas gracias de antemano por alguna ayuda! :)

Estos son los datos:

enter image description here

Y esta es la trama hasta ahora: ingrese la descripción de la imagen aquí

1
MadelineJC 9 jun. 2021 a las 00:09

2 respuestas

La mejor respuesta

Por lo tanto, en realidad es solo una línea de código más: puede coser diferentes GeoM's juntos en GGPLOT y hace que sea realmente fácil hacer exactamente de lo que está hablando. Solo agrega

geom_point(aes(y = Data)) + 

Así que todo el código se vería así.

ggplot(data = df, aes(x = Group, y = Data))+
  geom_violin(aes(fill = Group, color = Group))+
  geom_point(aes(y = Extra), size = 2, colour = "red") +
  stat_summary(aes(y = Data), fun=mean, geom="point", 
               color = "navyblue", shape = 17, size = 3)+
  stat_summary(aes(y = Data), fun=median, geom="point", 
               color = "black", shape = 16, size = 3)

He coloreado los puntos rojo y los he hecho más grandes, pero puedes cambiar eso. Que da: ingrese la descripción de la imagen aquí

1
colebrookson 8 jun. 2021 a las 21:19

Tu ejemplo está funcionando perfectamente. Lo único que se debe actualizar es no usar el valor constante para el color Arg dentro de AES. Podrías usarlo así solo fuera del AES.

# Making data
library(ggplot2)

df <- data.frame(c(rep(1,10), rep(2,10), rep(3,10)), sample.int(100, 10), c(rep(85,10), rep(60,10), rep(55,10)))
colnames(df) <- c("Group", "Data", "Extra")

# Grouping data
df$Group <- as.factor(df$Group)

# Plotting
Violin2 <- ggplot(data = df, aes(x = Group, y = Data))+
  geom_violin(aes(fill = Group, color = Group))+
  stat_summary(aes(y = Data), fun=mean, geom="point", color = "navyblue", shape = 17, size = 3)+
  stat_summary(aes(y = Data), fun=median, geom="point", color = "black", shape = 16, size = 3) +
  geom_point(aes(y = Extra))
Violin2

Creado en 2021-06-08 por la Paquete Reprex (v2.0.0)

1
polkas 8 jun. 2021 a las 21:18