2016-07-29 77 views
2

我想绘制一个时间序列,它具有使用ggplot2的类“POSIXct”的x轴,该ggplot2正在工作到一个点。scale_datetime移动x轴

当我尝试使用scale_x_datetime操纵x轴中断和标签时,它会在x轴上产生一个月的偏移。

任何人都可以解释这一点,并提供一个解决方案?

示例代码简化:

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”,并在内部调用format.POSIXct,它在内部调用as.POSIXlt。发生这种情况:

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

Voilà,不同的月份。

您可以通过不更改时区避免这种情况:

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

如果明确定义时区(你应该)创建POSIXct变量时,你应该在这里通过这个时区。