2013-05-03 15 views
27

Załóżmy, że mam dataframe:Korzystanie `geom_line()` z osią X oznacza czynniki

hist <- data.frame(date=Sys.Date() + 0:13, 
        counts=1:14) 

Chcę wykreślić całkowitej wliczane tygodnia, używając linię połączyć punkty. Poniższa stawia punktów na każdej wartości:

hist <- transform(hist, weekday=factor(weekdays(date), 
             levels=c('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'))) 
ggplot(hist, aes(x=weekday, y=counts)) + geom_point(stat='summary', fun.y=sum) 

Kiedy próbuję połączyć je linią (geom_line()) ggplot narzeka mając tylko jedną obserwację danych w każdej grupie, a tym samym nie jest w stanie narysować linię między punktami.

Rozumiem to - próbuję narysować jedną linię dla każdego dnia tygodnia (poziom czynnika).

Jak mogę sprawić, by ggplot udawał (na potrzeby samej linii), że dni tygodnia są numeryczne? Być może muszę mieć kolejną kolumnę day_of_week, która jest 0 dla poniedziałku, 1 dla wtorek, etc?

Odpowiedz

33

Jeśli rozumiem problemu poprawnie, określając group=1 i dodanie stat_summary() warstwę powinno załatwić sprawę:

ggplot(hist, aes(x=weekday, y=counts, group=1)) + 
geom_point(stat='summary', fun.y=sum) + 
stat_summary(fun.y=sum, geom="line") 

enter image description here

+3

fantastyczne! Jaki jest cel 'group = 1' (dlaczego 1? Co to robi?) –

+3

Och, myślę, że znalazłem to. [tutaj (dokumentacja ggplot2)] (http://docs.ggplot2.org/current/aes_group_order.html) –

+5

Jeśli chcesz wydrukować wiele linii naraz, powinieneś podać 'group = variableWhichDefinesLines ' –

Powiązane problemy