【发布时间】:2021-12-29 10:24:22
【问题描述】:
我正在尝试使用 ggplot 绘制夜间睡眠开始时间以及平均睡眠开始时间。我基本上有一堆列,其中感兴趣的列包含 POSIXct 日期时间对象。睡眠开始时间跨度几个月,所以他们都有不同的日期。我已经尝试过以下代码:
# change all the datetimes to a single date + time
sleep$StartHMS <- format(sleep$StartDateTime, "%H:%M:%S")
sleep$StartHMS <- as.POSIXct(strptime(sleep$StartHMS, "%H:%M:%S"))
sleep %>% ggplot(aes(x=StartHMS)) + geom_histogram(position = "identity") + scale_x_datetime(labels = date_format("%I %p))
问题在于,直方图中每边都有两个峰值,因为它默认从下午 4 点开始到下午 4 点左右结束。我想根据可用时间的最小和最大限制以及从晚上 8 点左右开始到早上 8 点之前结束的数据来开始直方图。
如果有更好的方法来处理这些数据并绘制这个“时间序列”,请告诉我,因为直方图在表示下午 4 点左右有很多人睡觉时看起来有点不对劲,但事实并非如此,因为运行以下 sn-p 表示大多数人的睡眠时间发生在晚上 11 点(或 23 小时)和凌晨 12 点(0 小时)之间。
library(lubdridate)
sleep$SleepHour <- hour(sleep$StartDateTime)
sleep %>% ggplot(aes(x = SleepHour)) + geom_bar(position = "identity")
我想最终将人们睡眠的平均时间也绘制成 geom_vline,并且 x 轴需要采用 12 小时时间格式 (AM/PM)。
提前致谢!
编辑:在此处包含一些用于 StartDateTime 的示例虚拟数据:
1 2021-03-20 23:47:30
2 2021-06-15 23:17:00
3 2021-06-21 22:35:00
4 2021-05-03 22:49:00
5 2021-06-23 00:51:00
6 2021-05-05 05:56:00
7 2021-05-22 22:34:00
8 2021-07-07 23:50:30
9 2021-04-14 22:29:30
10 2021-07-08 00:48:21
【问题讨论】:
-
您能否提供至少一些虚拟数据或仅提供可以随机化这些值的子集?
-
@Marco_CH 请看我上面的编辑!