You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在睡眠分期图(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:30:02