2013-12-12 20 views
6

Ho un grafico a scatole generato con il codice seguente:ggplot2: BoxPlot con tutti i punti distribuiti uniformemente in fila

b.males <- c(6, 7, 8, 8, 8, 9, 10, 10, 11, 11, 12, 12, 12, 12, 13, 14, 15) 
b.females <- c(14, 13, 12, 12, 11, 10, 10, 9, 9, 9, 9, 9, 8, 8, 8, 7, 7, 7, 7) 
b.total<-c(b.males,b.females) 

b.m<-data.frame(b.males) 
b.f<-data.frame(b.females) 
b.t<-data.frame(b.total) 

myList<-list(b.m, b.f, b.t) 
df<-melt(myList) 

colnames(df) <- c("class","count") 
plt<-ggplot(df, aes(x=class,y=count))+geom_boxplot() 
plt + geom_point(aes(x = as.numeric(class) + 0, colour=class)) 

cosa vorrei fare è, per un dato punto y-asse, mostra tutto singoli punti di fila. Ad esempio, per bilance, mi piacerebbe vedere 3 punti a 8, con il punto centrale esattamente al centro e gli altri due punti accanto ad esso su entrambi i lati.

ho tentato:

plt + geom_point(aes(x = as.numeric(class) + 0, colour=class)) + 
     geom_jitter(position=position_jitter(width=.1, height=0)) 

Ma questo non ha mantenuto i punti vicini tra loro. Inoltre, in alcuni casi metterebbe più punti a destra o a sinistra del centro del riquadro, senza distribuirli equamente come vorrei.

risposta

8

È possibile utilizzare geom_dotplot() per aggiungere punti - con argomenti binaxis="y" tuoi valori cestinate secondo i valori y (counts) e l'argomento stackdir="center" assicura che i punti sono centrati. Per modificare la dimensione dei punti di utilizzare argomento dotsize=

ggplot(df,aes(class,count))+geom_boxplot()+ 
    geom_dotplot(aes(fill=class),binaxis="y",stackdir="center",dotsize=0.5) 

enter image description here

+0

eccellente, proprio quello che volevo. Grazie. – Danny

Problemi correlati