2016-07-29 20 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" 

ヴォイア、別の月。

あなたは、タイムゾーンを変更しないことで、これを避けることができます。

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

POSIXct変数を作成するときに明示的に(あなたがすべき)時間帯を定義した場合、あなたはここで、この時間帯を渡す必要があります。