使用ggplot绘制分调查阶段的星期维度平均入睡时间折线图
实现方案
1. 加载所需依赖包
library(tidyverse) library(lubridate) library(hms)
2. 数据预处理
首先固定星期的展示顺序避免x轴乱序,再将字符串格式的入睡时间转为可计算的时间格式,最后分组计算不同调查阶段、不同星期的平均入睡时间:
# 请将下方代码中的df替换为你自己的数据集名称 plot_data <- df %>% # 固定星期顺序,labels参数可将x轴显示改为中文,不需要可以删除该参数 mutate(day = factor(day, levels = c("Mo", "Tu", "Mi", "Do", "Fr", "Sa", "So"), labels = c("周一", "周二", "周三", "周四", "周五", "周六", "周日"))) %>% # 入睡时间字符串转为时分秒格式,支持数值计算 mutate(slt = as_hms(slt)) %>% # 分组计算平均入睡时间 group_by(tmp, day) %>% summarise(mean_slt = mean(slt, na.rm = TRUE), .groups = "drop")
3. 绘制折线图
ggplot(plot_data, aes(x = day, y = mean_slt, color = tmp, group = tmp)) + # 绘制折线 geom_line(linewidth = 1.2) + # 添加数据点方便查看数值位置 geom_point(size = 3) + # 调整y轴为时分显示格式,可自行添加limits参数限定y轴范围,例如limits = as_hms(c("19:00:00", "24:00:00")) scale_y_time(labels = scales::time_format("%H:%M"), name = "平均入睡时间") + # 自定义图表文本 labs(x = "星期", color = "调查阶段", title = "不同调查阶段每周各天平均入睡时间对比") + # 简约主题设置 theme_bw() + theme(plot.title = element_text(hjust = 0.5))
内容的提问来源于stack exchange,提问作者psycho95
相关产品推荐
相关产品推荐

