2010-09-01 3 views
20

Próbuję zgrupować jedną zmienną moich danych przez inną, a następnie narysować linię za pomocą środków. Działa dobrze, gdy obie zmienne są liczbami. Mam jednak problem, gdy zmienna grupująca jest czynnikiem. Mam poniżej makietę.ggplot2: linia łącząca środki zgrupowanych danych

x <- sample(1:3, 40, replace=T) 
y <- rnorm(40) 

df1 <- data.frame(x, y) 
qplot(x, y, data=df1) + stat_summary(fun.y=mean, colour="red", geom="line") 

alt text

To wygląda świetnie. Jednak jeśli zmienna x jest czynnikiem, nie otrzymam linii.

df2 <- data.frame(x=as.factor(x), y) 
qplot(x, y, data=df2) + stat_summary(fun.y=mean, colour="red", geom="line") 

alt text

Czy jest coś, co mogę zrobić, aby ta linia wyświetlana?

Ps. geom = "punkt" działa, ale nie geom = "wiersz"

qplot(x, y, data=df2) + stat_summary(fun.y=mean, colour="red", geom="point") 

alt text

Dzięki za czytanie !!

Odpowiedz

24

ggplot2 celowo sprawia, że ​​rysowanie linii między czynnikami osi X jest nieco trudne, ponieważ trzeba się upewnić, że jest to znaczące. Jeśli twoja oś X to "Nowy Jork", "Filadelfia" i "Boston", nie byłoby dobrym pomysłem narysowanie linii łączącej je.

Jednak zakładając, że twoja zmienna x ma znaczący porządek, musisz zdefiniować estetykę group, aby narysować żądaną linię. Tutaj, group = 1.

qplot(x, y, data=df2) + 
    stat_summary(fun.y=mean, colour="red", geom="line", aes(group = 1)) 

Jeśli tylko dodać geom_line() na działce jak ten, trzeba będzie zdefiniować zmienną grupowania w podobny sposób.

+6

Rozwiązania te przestały działać. Generują błąd: "geom_path: Każda grupa składa się tylko z jednej obserwacji: czy musisz dostosować estetykę grupy?" –

+4

'ggplot (df2, aes (x = x), y = y)) + stat_summary (fun.y =" mean ", geom =" line ", aes (group = factor (grouping)))' pracował dla mnie –