【问题标题】:Set label format in time-of-day histogram在时间直方图中设置标签格式
【发布时间】:2015-09-16 19:46:18
【问题描述】:

我有一堆时间戳,想要制作时间值的直方图:

options(stringsAsFactors = FALSE)
mydata <- read.csv("https://raw.githubusercontent.com/mobilizingcs/demo/gh-pages/data/snack/snackdemo.csv")
time_of_day <- strptime(substring(mydata$context.timestamp, 12), format = "%H:%M:%S")

# Almost right
qplot(time_of_day)

默认值几乎是我想要的,但我希望 X 的标签只显示时间,而不是日期:

# This seems wrong??
qplot(time_of_day) + scale_x_datetime(labels = scales::date_format("%H:%M"))

现在我确实得到了标签格式,但 ggplot2 似乎放错了标签值?它在新图中将点16 Sept 00:00 标记为22:00。如何获得原始比例,但使用 %H:%M 标签格式?

【问题讨论】:

  • 使用tz,看看有没有变化。

标签: r ggplot2


【解决方案1】:

scales::date_format 默认设置tz = "UTC" 导致时间错误。

查看 time_of_day 你想要 CEST-Timezone 所以以下工作

qplot(time_of_day) + 
    scale_x_datetime(labels = scales::date_format("%H:%M", tz = "Europe/Berlin"))

编辑:如果您不想依赖用户的时区,则必须首先指定 mydata$context.timestamp 的 tz。 具体来说,您的 strptime 调用会根据用户当前的 tz 产生不同的时间。见?strptime。由于您不提供 tz,因此默认为 tz=""

但“”是当前时区

解决办法:

  1. strptime内指定mydata$context.timestamp的数据
  2. 选择一个您想在其中绘制数据的“标准”时区并将其提供给scales::date_format("%H:%M", tz="YOUR STANDART TZ")

作为大多数标准化选择tz = "UTC"这是scales::date_format中的默认值

【讨论】:

    【解决方案2】:

    看,我在东海岸得到了一个完全不同的图表:

    我已经深入研究了 ggplot2 源代码并发现......好吧,老实说,它的功能太深了,我无法理解所有这些;p。但我怀疑,鉴于我们在平台之间看到的不同结果,原因是在某些时候 scale_x_datetime 正在对数据所在的时区做出假设,而不是由实际数据得出。这就是我所拥有的。好像是个bug。

    【讨论】:

      猜你喜欢
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      相关资源
      最近更新 更多