2015-06-02 15 views
8

Chcę ustawić granice dla osi X dla wykresu danych szeregów czasowych, które zawierają tylko czas (bez dat). Moje granice są:Ustawianie limitów z scale_x_datetime i danymi czasowymi

lims <- strptime(c("03:00","16:00"), format = "%H:%M") 

i moi drukuje ggplot w porządku, ale gdy dodać do tego scale_x_datetime

scale_x_datetime(limits = lims) 

mam Error: Invalid input: time_trans works with objects of class POSIXct only

pełni powtarzalne przykład uprzejmości How to create a time scatterplot with R?

dates <- as.POSIXct(as.Date("2011/01/01") + sample(0:365, 100, replace=TRUE)) 
times <- as.POSIXct(runif(100, 0, 24*60*60), origin="2011/01/01") 
df <- data.frame(
    dates = dates, 
    times = times 
) 

lims <- strptime(c("04:00","16:00"), format = "%H:%M") 

library(scales) 
library(ggplot2) 

ggplot(df, aes(x=dates, y=times)) + 
    geom_point() + 
    scale_y_datetime(limits = lims, breaks=date_breaks("4 hour"), labels=date_format("%H:%M")) + 
    theme(axis.text.x=element_text(angle=90)) 

Odpowiedz

9

komunikat o błędzie mówi, że powinieneś użyć as.POSIXct na lims. Musisz również dodać datę (rok, miesiąc i dzień) w lims, ponieważ domyślnie będzie to `2015, który jest poza granicami.

lims <- as.POSIXct(strptime(c("2011-01-01 03:00","2011-01-01 16:00"), format = "%Y-%m-%d %H:%M"))  
ggplot(df, aes(x=dates, y=times)) + 
    geom_point() + 
    scale_y_datetime(limits =lims, breaks=date_breaks("4 hour"), labels=date_format("%H:%M"))+ 
    theme(axis.text.x=element_text(angle=90)) 
+0

To działało, ale musiałem zmienić datę na dzisiejszą datę. – raphael

+0

Wprawdzie nie wiem, co oznaczają POSIXct i POSIXlt, ale z danymi POSIXlt, NIE mogłem ustawić limitów POSIXlt. '' Błąd: Nieprawidłowe dane wejściowe: time_trans działa tylko z obiektami klasy POSIXct'' Z jakiegoś powodu POSIXct działał, jak zasugerowano w tej odpowiedzi. Świetna sugestia. – PatrickT

Powiązane problemy