ggplot2 scale_x_datetime的错误

时间:2016-11-04 14:28:33

标签: r ggplot2

我对scale_x_datetime ...

有一个恼人的错误
plt = ggplot() + geom_line(data=d, aes(Time, d[, 2]), color=col) +
        scale_x_datetime(breaks = seq(d[1,1],d[dim(d)[1],1],interval*60))

在指定的时间间隔内在地块上生成正确的时间戳...但是,如果我添加date_labels = "%m-%d %H:%M"来格式化时间戳在地块上打印的方式,则突然小时值关闭5小时...

以下代码在图上产生错误的小时值

plt = ggplot() + geom_line(data=d, aes(Time, d[, 2]), color=col) +
        scale_x_datetime(date_labels = "%m-%d %H:%M",
                         breaks = seq(d[1,1],d[dim(d)[1],1],interval*60))

为了再现性......

d = data.frame(Time = as.POSIXct(seq(1446871740, 1446893340, 60), origin = "1970-01-01"),
               Value = rnorm(361))
interval = floor(as.numeric(difftime(d[dim(d)[1],1], d[1,1], units="mins")) / 3)
col = "red"

1 个答案:

答案 0 :(得分:1)

这是一个时区问题。在 ggplot2_2.2.0 之前的ggplot2版本中,您需要在scale_x_datetime中设置标签时设置时区。

scale_x_datetime(labels = scales::date_format("%m-%d %H:%M", tz = "America/Los_Angeles")

这不再是 ggplot2_2.2.0 的问题。来自news

  

scale _ * _ datetime()现在支持时区。它将使用时区   默认情况下附加到变量,但可以用   时区论证。

将ggplot2更新为当前版本将解决第二个绘图的时移问题。如果您想设置不同的时区,timezone现在有一个scale_*_datetime参数。