在时间直方图

时间:2015-09-16 19:46:18

标签: r ggplot2

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

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)

plot1

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

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

enter image description here

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

2 个答案:

答案 0 :(得分:4)

默认情况下,

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

查看您想要 CEST -Timezone的time_of_day,以便以下工作

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. mydata$context.timestamp
  2. 中指定strptime的数据
  3. 选择要在其中绘制数据的“标准”时区,并将其提供给scales::date_format("%H:%M", tz="YOUR STANDART TZ")
  4. 由于大多数标准化选择tz = "UTC",这是scales::date_format

    中的默认值

答案 1 :(得分:0)

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

My graph

我已经深入研究了ggplot2源代码并发现......好吧,老实说,这对我来说功能太深了,无法理解所有内容; p。但我怀疑原因,鉴于我们在平台上看到的不同结果,在某些时候,scale_x_datetime正在假设数据所处的时区不是由实际数据产生的。这就是我所拥有的一切。看起来像一个错误。