2017-09-18 4 views
1

Ich versuche, Boxplots (vorzugsweise oben oder unten), die nach zwei Ebenen gruppiert sind, mit einer Stichprobengröße zu versehen. Ich habe die Funktion facet_grid() verwendet, um ein Panel-Plot zu erstellen. Ich versuchte dann, die Annotate() Funktion zu verwenden, um die Beispielgrößen hinzuzufügen, jedoch konnte das nicht funktionieren, weil es die Werte im zweiten Panel wiederholte. Gibt es einen einfachen Weg, dies zu tun?Beispielgröße zu einer Feldfigur von Boxplots hinzufügen

head(FeatherData, n=10) 
    Location Status FeatherD    Species  ID 
## 1  TX Resident -27.41495   Carolina wren CARW (32) 
## 2  TX Resident -29.17626   Carolina wren CARW (32) 
## 3  TX Resident -31.08070   Carolina wren CARW (32) 
## 4  TX Migrant -169.19579 Yellow-rumped warbler YRWA (28) 
## 5  TX Migrant -170.42079 Yellow-rumped warbler YRWA (28) 
## 6  TX Migrant -158.66925 Yellow-rumped warbler YRWA (28) 
## 7  TX Migrant -165.55278 Yellow-rumped warbler YRWA (28) 
## 8  TX Migrant -170.43374 Yellow-rumped warbler YRWA (28) 
## 9  TX Migrant -170.21801 Yellow-rumped warbler YRWA (28) 
## 10  TX Migrant -184.45871 Yellow-rumped warbler YRWA (28) 


ggplot(FeatherData, aes(x = Location, y = FeatherD)) + 
    geom_boxplot(alpha = 0.7, fill='#A4A4A4') + 
    scale_y_continuous() + 
    scale_x_discrete(name = "Location") + 
    theme_bw() + 
    theme(plot.title = element_text(size = 20, family = "Times", face = 
"bold"), 
     text = element_text(size = 20, family = "Times"), 
     axis.title = element_text(face="bold"), 
     axis.text.x=element_text(size = 15)) + 
    ylab(expression(Feather~delta^2~H["f"]~"‰")) + 
    facet_grid(. ~ Status) 

enter image description here

+0

können Sie bitte Beispiel Ihrer Daten ('Kopf (FeatherData)')? – PoGibas

+0

Hinzugefügt Beispiel sowie aktuelle Boxplot Figur! – AMaldonado

Antwort

0

Es gibt mehrere Möglichkeiten, diese Art von Aufgabe zu tun. Die flexibelste Art und Weise ist Ihre Statistik außerhalb des Plotten Ruf als separate Datenrahmen zu berechnen und sie als seine eigene Schicht verwenden:

library(dplyr) 
library(ggplot2) 

cw_summary <- ChickWeight %>% 
    group_by(Diet) %>% 
    tally() 

cw_summary 
# A tibble: 4 x 2 
    Diet  n 
    <fctr> <int> 
1  1 220 
2  2 120 
3  3 120 
4  4 118 
ggplot(ChickWeight, aes(Diet, weight)) + 
    geom_boxplot() + 
    facet_grid(~Diet) + 
    geom_text(data = cw_summary, 
      aes(Diet, Inf, label = n), vjust = 1) 

enter image description here

Die andere Methode ist es, die zusammenfassenden Funktionen zu verwenden, aber das kann fiddly sein. Hier ein Beispiel:

ggplot(ChickWeight, aes(Diet, weight)) + 
    geom_boxplot() + 
    stat_summary(fun.y = median, fun.ymax = length, 
       geom = "text", aes(label = ..ymax..), vjust = -1) + 
    facet_grid(~Diet) 

enter image description here

Hier verwenden ich fun.y die Zusammenfassung am Median der y-Werte zu positionieren und verwenden fun.ymax eine interne Variable genannt zu berechnen ..ymax .. mit der Funktion length (die nur die Anzahl der Beobachtungen zählt).

+0

Danke @ Brian! Dein erster Vorschlag hat wunderbar funktioniert! – AMaldonado

Verwandte Themen