2016-07-29 14 views
2

Ich versuche, eine Zeitreihe zu plotten, die eine x-Achse der Klasse "POSIXct" mit ggplot2 hat, die bis zu einem Punkt arbeitet.scale_datetime verschiebt X-Achse

Wenn ich versuche, die X-Achsenbrüche und Beschriftungen mit scale_x_datetime zu manipulieren, erzeugt es eine Verschiebung von einem Monat in der X-Achse.

Kann jemand das erklären und eine Lösung anbieten?

Beispiel vereinfacht Code:

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")) 

Antwort

2

Es ist eine Zeitzone Problem. date_format setzt die Zeitzone standardmäßig auf "UTC" und ruft intern format.POSIXct auf, die intern as.POSIXlt aufruft. Da passiert das:

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

Voilà, ein anderer Monat.

Sie können dies vermeiden, indem Sie die Zeitzone zu ändern:

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

Wenn Sie explizit eine Zeitzone (Sie sollten) definiert, wenn die POSIXct Variable erstellen, sollten Sie diese Zeitzone hinter sich lassen.