如何在睡眠分期图(Hypnogram)中为曲线下方区域着色?
解决睡眠分期图(Hypnogram)的颜色分组问题
要实现将"AW"/"QW"设为同色、"Rt"/"R"设为同色的效果,你需要先对状态进行分组,再通过色块填充的方式绘制标准睡眠分期图,具体步骤如下:
1. 预处理数据:创建颜色分组
在数据框中新增一列,把需要同色的状态归为同一分组:
df <- data.frame ( time = seq(1, 250), state = c(rep ("AW", 20), rep ("QW",35), rep ("NR", 100), rep ("Rt", 40), rep("R", 55)) ) # 创建颜色分组,将同色状态归为一类 df$color_group <- ifelse(df$state %in% c("AW", "QW"), "清醒", ifelse(df$state == "NR", "非快速眼动睡眠", "快速眼动睡眠"))
2. 绘制符合要求的睡眠分期图
用geom_tile绘制色块填充的分期图(这是睡眠分期图的专业呈现形式),同时绑定自定义颜色映射:
library(ggplot2) library(ggthemes) ggplot(df, aes(x = time, y = state)) + # 绘制填充色块,height参数调整色块纵向间距 geom_tile(aes(fill = color_group), height = 0.8) + # 自定义分组颜色 scale_fill_manual(values = c( "清醒" = "#ff7f7f", "非快速眼动睡眠" = "#7fbf7f", "快速眼动睡眠" = "#7f7fff" )) + labs(title = "Subject 1", x = "Time (s)", y = "睡眠状态", fill = "状态分组") + theme_clean() + # 可选:按需求指定y轴状态顺序 scale_y_discrete(limits = c("AW", "QW", "NR", "Rt", "R"))
关键调整说明
- 替换
geom_step/geom_line为geom_tile:睡眠分期图通常以色块展示时间段对应的状态,比线条更直观专业 - 通过
color_group统一颜色映射:将需要同色的状态归为一组后,实现同一分组共享颜色的效果 - 自定义颜色与轴顺序:可根据需求修改
scale_fill_manual的颜色值,或通过scale_y_discrete调整状态的纵向排列顺序
内容的提问来源于stack exchange,提问作者Luis Angel
相关产品推荐
相关产品推荐

