2011-12-02 10 views
6

Używam ggplot do tworzenia wykresów i zawsze lubię przesuwać punkty danych w poziomie, aby paski błędów nie nakładały się. Odkryłem, że gdy użyłem danych daty dla mojej osi x, tracę możliwość kompensowania punktów danych.R i ggplot- Zmiana osi X na Data usuwa uniknięcie pozycji

DF=data.frame(Date=c("2006-09-01", "2007-09-01", "2008-09-01" ,"2009-09-01", "2010-01-01" ,"2011-01-01"),Count=c(1,2,3,4,5,6,2,4,6,8,10,12),Type=c('A','A','A','A','A','A','B','B','B','B','B','B')) 

Gdybym wykreślić powyższej ramce danych za pomocą ggplot tak, punkty są przesunięte

dodge=position_dodge(.5) 
ggplot(data=DF,aes(x=Date,y=Count,group=Type))+geom_point(position=dodge) 

Ale jeśli wyznaczą dane aktualne, jak rzeczywistymi datami

DF$Date=as.Date(DF$Date) 
ggplot(data=DF,aes(x=Date,y=Count,group=Type))+geom_point(position=dodge) 

punkty są nie są już kompensowane, mimo że określam je jako

Unikałem tego problemu w przeszłości dzięki temu, że moje dane są ograniczone tylko do "roku" i traktuję je jako numeryczne. Ale teraz muszę podać informacje o miesiącu (wliczam dzień w mojej randce od "as.Date dostaje trochę funky, jeśli go nie uwzględniłem.)

Czy ktoś może mi powiedzieć, czy jest sposób, w jaki mogę wykreślić szeregów czasowych przy użyciu ggplot, który pozwoli mi na przesunięcie moje punkty danych i słupki błędów.

Odpowiedz

9

Właściwie punkty są uchylił lekko.

trzeba pamiętać, że odstęp między jeden rok wynosi 365 dni. position_dodge(0.5) przesuwa punkt o (pół dnia)/2. Tak więc pozycja przesuwa się o 0,5/2/365 w odstępie rocznym.

Jeśli zdecydujesz `position_dodge (0,5 * 365), a następnie pojawi się wykres zgodnie z oczekiwaniami:

DF <- data.frame(
    expand.grid(Date=c("2006-09-01", "2007-09-01", "2008-09-01" ,"2009-09-01"), 
    Type = c("A", "B")), 
    Count = 1:4) 
DF$Date2 <- as.Date(DF$Date) 

ggplot(data=DF,aes(x=Date2,y=Count,group=Type))+ geom_point(position = position_dodge(365*0.5)) 

enter image description here

+0

geniusz! Dziękuję za odpowiedź – Vinterwoo

Powiązane problemy