2016-07-29 5 views
2

점까지 작동하는 ggplot2를 사용하여 "POSIXct"클래스의 x 축을 갖는 시계열을 플롯하려고합니다.scale_datetime 시프트 x 축

scale_x_datetime을 사용하여 x 축 나누기 및 레이블을 조작하려고하면 x 축에 1 개월 이동이 발생합니다.

누구든지 이것을 설명하고 해결책을 제공 할 수 있습니까?

예 단순화 된 코드 :

start <- as.POSIXct("2014/07/01 00:00:00") 
end <- as.POSIXct("2014/10/01 23:30:00") 
interval <- as.difftime("00:30:00") 
df <- data.frame(t=seq(start, end, by="1 day")) 
df$v <- sample(1:100, replace=TRUE, nrow(df)) 

p <- ggplot(data=df, aes(x=t)) + 
    geom_line(aes(y=v)) 

p2 <- p + scale_x_datetime(breaks=date_breaks("1 month"), labels=date_format("%b-%y")) 

답변

2

이 시간대 문제입니다. date_format은 기본적으로 시간대를 "UTC"로 설정하고 내부적으로 as.POSIXlt을 호출하는 format.POSIXct을 내부적으로 호출합니다. 이 상황이 발생합니다 :

as.POSIXlt(start, "UTC") 
#[1] "2014-06-30 22:00:00 UTC" 

보라, 다른 달.

당신은 시간대를 변경하지 않음으로써이 문제를 피할 수 있습니다 다음 POSIXct 변수를 만들 때

p + scale_x_datetime(breaks=date_breaks("1 month"), 
        labels=date_format("%b-%y", tz = Sys.timezone(location = TRUE))) 

명시 적으로 시간대를 정의하면 (당신은한다), 여기의 타임 존을 통과해야한다.