ggplot 折线图,x 轴为天数,y 轴为时钟时间

ggplot line graph with days on x-axis and clock time on y-axis

我想说明按不同调查阶段(T1、T2、T3)分组的每天平均睡眠时间。 这是我的数据框的示例:

structure(list(code = c("AJH27", "AJH27", "AJH27", "AJH27", "AJH27", 
"AJH27"), slt = c("22:10:00", "21:22:00", "22:00:00", "21:50:00", 
"20:55:00", "21:55:00"), day = c("Mi", "Do", "Fr", "Sa", "So", 
"Mo"), tmp = c("T1", "T1", "T1", "T1", "T1", "T1")), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

原始数据集包含三个以上观测值的数据。 现在我想创建一个折线图,x 轴上的天数(从周一到周日)显示调查阶段每一天的平均睡眠时间(y 轴上的时钟时间)。这将包括三个不同的行(按组着色)。

我使用 ggplot 的经验不是很丰富,我不知道如何构建我想要的图表。

编辑:

这是我使用您的代码@JonSpring 时我的图表的样子

这是一种使用 lubridate::hms 将 H:M:S 文本转换为时间段(以秒为单位)然后将其转换为小时的方法。

library(dplyr); library(lubridate); library(ggplot2)

# convert day into an ordered factor so it displays in the right order
dat$day = factor(dat$day, ordered = TRUE,
                     levels = c("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"))

dat %>%
  mutate(hours = as.numeric(hms(slt))/(60*60)) %>%
  ggplot(aes(day, hours, color = tmp, group = tmp)) +
  geom_line()

编辑:或者,为 y 轴使用时间戳:

dat %>%
  mutate(hours = ymd_hms(paste("20000101", slt))) %>%
  ggplot(aes(day, hours, color = tmp, group = tmp)) +
  geom_line()