如何独立于日期绘制 POSIXct objects / 时间戳?
How to plot POSIXct objects / timestamps independent of day?
我希望问题标题有意义。我正在使用 Google 表单收集一些数据。表格始终在下午 5 点到 7 点之间提交,但在不同的日期提交。我想在 x-axis 上绘制时间戳的 time
组件与表单中的其他一些值。我想确保所有时间图都在相同的 two-hour window 中结束(即下午 5 点到 7 点之间),而不管时间戳的 date
组成部分如何。
我已将回复下载为 CSV 格式,并且可以毫无问题地读取时间戳:
demo <- as.POSIXct(demo$Timestamp, format="%m/%d/%Y %H:%M:%S")
数据如下所示:
> demo
[1] "2015-10-12 17:02:42 CEST" "2015-10-12 17:02:46 CEST" "2015-10-12 17:02:46 CEST"
[4] "2015-10-12 17:02:50 CEST" "2015-10-12 17:02:52 CEST" "2015-10-12 17:02:55 CEST"
[7] "2015-10-12 17:02:58 CEST" "2015-10-12 17:03:02 CEST" "2015-10-12 17:03:09 CEST"
[10] "2015-10-12 17:03:15 CEST" "2015-10-12 17:03:22 CEST" "2015-10-12 17:03:24 CEST"
[13] "2015-10-12 17:03:36 CEST" "2015-10-12 17:03:48 CEST" "2015-10-12 17:04:07 CEST"
[16] "2015-10-12 17:09:20 CEST"
我可以使用像这样简单的东西来绘制这些:
plot(demo, rnorm(length(demo)))
但我希望 x-axis 的范围是下午 5-7 点,我需要确保所有数据都绘制在 two-hour 范围内,与记录数据的日期无关在。如果我这样做:
startTime <- as.POSIXct("17:00:00", format="%H:%M:%S")
endTime <- as.POSIXct("19:00:00", format="%H:%M:%S")
plot(demo, rnorm(length(demo)), xlim=c(startTime, endTime), xaxt='n')
axis.POSIXct(1, at = seq(startTime, endTime, by="hour"), format = "%M", labels=c("17:00", "18:00", "19:00"))
我得到了正确的情节轮廓,但没有数据。这是因为 startTime
和 endTime
将被设置为当前日期。如果我明确使用使它们与 demo
...
中的数据相同
startTime <- as.POSIXct("10/12/2015 17:00:00", format="%m/%d/%Y %H:%M:%S")
endTime <- as.POSIXct("10/12/2015 19:00:00", format="%m/%d/%Y %H:%M:%S")
...数据完全按照我希望的方式显示在图中。
但是:我无法添加其他任何一天的数据点。有人可以向我解释我如何 manipulate/use POSIXct objects 剥离他们的 "date" 组件并将它们绘制在同一个图中?
出于测试目的,您可以复制此向量以重现我在上面发布的代码:
demo <- as.POSIXct(c("2015-10-12 17:02:42 CEST", "2015-10-12 17:02:46 CEST", "2015-10-12 17:02:46 CEST", "2015-10-12 17:02:50 CEST", "2015-10-12 17:02:52 CEST", "2015-10-12 17:02:55 CEST", "2015-10-12 17:02:58 CEST", "2015-10-12 17:03:02 CEST", "2015-10-12 17:03:09 CEST", "2015-10-12 17:03:15 CEST", "2015-10-12 17:03:22 CEST", "2015-10-12 17:03:24 CEST", "2015-10-12 17:03:36 CEST", "2015-10-12 17:03:48 CEST", "2015-10-12 17:04:07 CEST", "2015-10-12 17:09:20 CEST"))
您可以尝试使用 lubridate 获取小时和分钟,然后重新格式化回 POSIXct。这将起作用,因为 POSIXct 的默认来源是当前日期。
library(lubridate)
demo <- as.POSIXct(paste(hour(demo), minute(demo)), format = "%H %M")
我希望问题标题有意义。我正在使用 Google 表单收集一些数据。表格始终在下午 5 点到 7 点之间提交,但在不同的日期提交。我想在 x-axis 上绘制时间戳的 time
组件与表单中的其他一些值。我想确保所有时间图都在相同的 two-hour window 中结束(即下午 5 点到 7 点之间),而不管时间戳的 date
组成部分如何。
我已将回复下载为 CSV 格式,并且可以毫无问题地读取时间戳:
demo <- as.POSIXct(demo$Timestamp, format="%m/%d/%Y %H:%M:%S")
数据如下所示:
> demo
[1] "2015-10-12 17:02:42 CEST" "2015-10-12 17:02:46 CEST" "2015-10-12 17:02:46 CEST"
[4] "2015-10-12 17:02:50 CEST" "2015-10-12 17:02:52 CEST" "2015-10-12 17:02:55 CEST"
[7] "2015-10-12 17:02:58 CEST" "2015-10-12 17:03:02 CEST" "2015-10-12 17:03:09 CEST"
[10] "2015-10-12 17:03:15 CEST" "2015-10-12 17:03:22 CEST" "2015-10-12 17:03:24 CEST"
[13] "2015-10-12 17:03:36 CEST" "2015-10-12 17:03:48 CEST" "2015-10-12 17:04:07 CEST"
[16] "2015-10-12 17:09:20 CEST"
我可以使用像这样简单的东西来绘制这些:
plot(demo, rnorm(length(demo)))
但我希望 x-axis 的范围是下午 5-7 点,我需要确保所有数据都绘制在 two-hour 范围内,与记录数据的日期无关在。如果我这样做:
startTime <- as.POSIXct("17:00:00", format="%H:%M:%S")
endTime <- as.POSIXct("19:00:00", format="%H:%M:%S")
plot(demo, rnorm(length(demo)), xlim=c(startTime, endTime), xaxt='n')
axis.POSIXct(1, at = seq(startTime, endTime, by="hour"), format = "%M", labels=c("17:00", "18:00", "19:00"))
我得到了正确的情节轮廓,但没有数据。这是因为 startTime
和 endTime
将被设置为当前日期。如果我明确使用使它们与 demo
...
startTime <- as.POSIXct("10/12/2015 17:00:00", format="%m/%d/%Y %H:%M:%S")
endTime <- as.POSIXct("10/12/2015 19:00:00", format="%m/%d/%Y %H:%M:%S")
...数据完全按照我希望的方式显示在图中。
但是:我无法添加其他任何一天的数据点。有人可以向我解释我如何 manipulate/use POSIXct objects 剥离他们的 "date" 组件并将它们绘制在同一个图中?
出于测试目的,您可以复制此向量以重现我在上面发布的代码:
demo <- as.POSIXct(c("2015-10-12 17:02:42 CEST", "2015-10-12 17:02:46 CEST", "2015-10-12 17:02:46 CEST", "2015-10-12 17:02:50 CEST", "2015-10-12 17:02:52 CEST", "2015-10-12 17:02:55 CEST", "2015-10-12 17:02:58 CEST", "2015-10-12 17:03:02 CEST", "2015-10-12 17:03:09 CEST", "2015-10-12 17:03:15 CEST", "2015-10-12 17:03:22 CEST", "2015-10-12 17:03:24 CEST", "2015-10-12 17:03:36 CEST", "2015-10-12 17:03:48 CEST", "2015-10-12 17:04:07 CEST", "2015-10-12 17:09:20 CEST"))
您可以尝试使用 lubridate 获取小时和分钟,然后重新格式化回 POSIXct。这将起作用,因为 POSIXct 的默认来源是当前日期。
library(lubridate)
demo <- as.POSIXct(paste(hour(demo), minute(demo)), format = "%H %M")