2010-10-21 17 views
18

Mam pudełko z wieloma pudełkami. Chcę połączyć średnią dla każdego pudełka razem z linią. Plansza nie wyświetla domyślnie średniej, zamiast tego środkowa linia wskazuje tylko medianę. Próbowałem:Łączenie oznacza na pudełku z linią (ggplot2)

ggplot(data, aes(x=xData, y=yData, group=g)) 
    + geom_boxplot() 
    + stat_summary(fun.y=mean, geom="line") 

To nie działa.

Co ciekawe, robi

stat_summary(fun.y=mean, geom="point") 

rysuje punkt medianę w każdym pudełku. Dlaczego "linia" nie działa?

Coś takiego, ale stosując ggplot2, http://www.aliquote.org/articles/tech/RMB/c4_sols/plot45.png

+1

czy ktoś może powiedzieć uzasadnienie grupy = 1 w roztworze Bernd, byłoby świetnie. – nixbox

+0

Domyślam się, że grupa = 1 wyłączona estetyka grupy, ponieważ jeśli jest włączona, to linie są rysowane osobno dla każdej grupy, co w przypadku średniej byłoby tylko jednym punktem, dlatego nie byłoby linii do narysowania. – nixbox

+0

Tak, myślę, że masz rację. Znalazłem dobre wyjaśnienie w książce Hadley'a Wickhama i zaktualizowałem moją odpowiedź. –

Odpowiedz

27

Czy tego szukasz?

library(ggplot2) 

x <- factor(rep(1:10, 100)) 
y <- rnorm(1000) 
df <- data.frame(x=x, y=y) 

ggplot(df, aes(x=x, y=y)) + 
geom_boxplot() + 
stat_summary(fun.y=mean, geom="line", aes(group=1)) + 
stat_summary(fun.y=mean, geom="point") 

Aktualizacja:

Niektóre wyjaśnienia na temat group = 1 ustawienie: Myślę, że znalazłem wyjaśnienie w książce Hadley Wickhama "ggplot2: Elegant Graphics for Data Analysis". Na stronie 51 pisze:

Różne grupy na różnych warstwach.

Czasami chcemy wydrukować podsumowania na podstawie różnych poziomów agregacji . Różne warstwy mogą mieć różne estetykę grupy, więc , że niektóre wyświetlają indywidualny poziom danych , podczas gdy inne wyświetlają podsumowania większych grup.

Opierając się na powyższym przykładzie, załóżmy, że chcemy dodać pojedynczą linię gładką do działki nowo utworzonego z siedzibą na wieki i wysokości wszystkich chłopców. Jeśli użyjemy tej samej grupy dla gładkiej, której użyliśmy dla linii, , otrzymamy pierwszy wykres na rysunku 4.4.

p + geom_smooth (AES (grupa = Temat), method = "lm", SE = F)

To nie jest to, co chcieliśmy; mamy nieumyślnie dodano wygładzoną linię dla każdego chłopca. Ta nowa warstwa potrzebuje innej grupy estetycznej, grupa = 1, , więc nowa linia będzie oparta na wszystkich danych, jak pokazano na drugim wykresie na rysunku. Zmodyfikowany warstwa wygląda następująco:

p + geom_smooth (AE (grupa = 1) sposób = "lm" rozmiar = 2, SE = F)

[...] Stosowanie AES (group = 1) w gładką warstwą pasuje pojedynczą linię najlepszego dopasowania we wszystkich chłopców.”

+2

tak !, dzięki, ale co znaczy tutaj grupa = 1? – nixbox

+0

Ah, wiedziałem, że to pytanie przyjdzie :-) Przepraszam, ale muszę przyznać, że nie mam pojęcia. Kilka tygodni temu miałem podobny problem i znalazłem to rozwiązanie, które sprawdziło się u mnie. –

+0

haha, dzięki i tak :) – nixbox

Powiązane problemy