2013-12-12 13 views
6

Ich habe einen boxplot mit dem folgenden Code erzeugt:ggplot2: boxplot mit allen Punkten gleichmäßig in einer Reihe verteilt

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)) 

Was ich tun möchte, für jeden gegebenen y-Achse Punkt, alle anzeigen einzelne Punkte in einer Reihe. Zum Beispiel, für b.males, würde ich gerne 3 Punkte bei 8 sehen, mit dem mittleren Punkt genau in der Mitte und den anderen zwei Punkten rechts daneben auf jeder Seite.

ich versucht:

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

Aber nicht halten die Punkte nahe beieinander. Außerdem würde es in manchen Fällen mehrere Punkte rechts oder links von der Mitte der Box platzieren, anstatt sie gleichmäßig zu verteilen, wie es mir gefällt.

Antwort

8

können Sie geom_dotplot() verwenden, um Punkte hinzuzufügen - mit Argumenten binaxis="y" Ihre Werte binned nach y-Werten (counts) und das Argument stackdir="center" sorgt dafür, dass Punkte zentriert sind. Um die Größe der Punkte zu ändern Argument 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

ausgezeichnet, genau das, was ich wollte. Vielen Dank. – Danny

Verwandte Themen