2016-07-29 108 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變量時,你應該在這裏通過這個時區。