3

我似乎无法在 ggplot2 0.9.0 文档、0.9.0 过渡指南或搜索中找到信息。

我猜在早期版本中,您会将tz参数添加到scale_x_datetime. 我试过将tz论点放在不同的地方,scale_x_datetime但不断出错。见下文。

我的日期时间数据POSIXct采用 GMT 时区格式。当我绘制它时,轴刻度和中断显示我的本地时区(EST)。我希望轴上的午夜是 GMT 时区的午夜。在 ggplot2 0.9.0 中执行此操作的正确方法是什么?

attributes(data$date)
# $class
# [1] "POSIXct" "POSIXt" 

# $tzone
# [1] "GMT"

ggplot(data, aes(x = date)) +
  geom_line(aes(y = count)) +
  scale_x_datetime(breaks = date_breaks("1 day"),
                   labels = date_format("%d", tz = "UTC"))
# Error in date_format("%d", tz = "UTC") : unused argument(s) (tz = "UTC")

ggplot(data, aes(x = date)) +
  geom_line(aes(y = count)) +
  scale_x_datetime(breaks = date_breaks("1 day", tz = "UTC"),
                   labels = date_format("%d"))
# Error in date_breaks("1 day", tz = "UTC") : 
#   unused argument(s) (tz = "UTC")

ggplot(data, aes(x = date)) +
  geom_line(aes(y = count)) +
  scale_x_datetime(breaks = date_breaks("1 day"),
                   labels = date_format("%d"),
                   tz = "UTC")
# Error in continuous_scale(aesthetics, "datetime", identity, breaks = breaks,  : 
#   unused argument(s) (tz = "UTC")
4

2 回答 2

5

由于scales 2.2(~2012 年 7 月),可以将tz参数传递给time_trans.

例如,它以 UTC 格式格式化时间戳并且不需要额外的编码:

+scale_x_continuous(trans = time_trans(tz = "UTC"))
于 2013-05-12T12:15:44.443 回答
5

@joran 是在正确的轨道上,但是额外的参数不能通过格式化函数传递,所以它们需要传递给生成器函数:

date_format_tz <- function(format = "%Y-%m-%d", tz = "UTC") {
  function(x) format(x, format, tz=tz)
}

然后可以将其称为:

scale_x_datetime(breaks = date_breaks("1 day"),
                 labels = date_format_tz("%d", tz="UTC"))
于 2012-06-12T18:04:06.063 回答