본문 바로가기
Somnology

수면 곡선 (Hypnogram) 그리기

by goatlab 2023. 9. 26.
728x90
반응형
SMALL

수면 곡선 (Hypnogram) 그리기

 

import numpy as np
import matplotlib.pyplot as plt

# 수면 단계 데이터
y = 'sleep_stage'

# x 축 데이터: 시간에 해당하는 값
x = list(range(len(y)))

# 단계별 라벨 설정
labels = {0: 'N3', 1: 'N2', 2: 'N1', 3: 'R', 4: 'W'}

# 그래프 그리기
plt.figure(figsize=(15, 6))
plt.plot(x, y, marker='o', linestyle='-')
plt.yticks(ticks=list(labels.keys()), labels=list(labels.values()))
plt.xlabel('Time (hour)')
plt.ylabel('Sleep Stage')

# x축 시간 단위 설정
x_labels = np.arange(0, num_points, 120)
x_ticks = [i for i in x_labels]
x_labels = [f"{i//120}:00" for i in x_labels]
plt.xticks(ticks=x_ticks, labels=x_labels)

plt.title('Sleep Hypnogram')
plt.grid(True)
plt.show()

 

수동 및 자동 채점 비교

 

import matplotlib.pyplot as plt
import numpy as np

# 수면 단계 데이터
y1 = 'manual'
y2 = 'auto'

# x 축 데이터: 시간에 해당하는 값
x = list(range(len(y1)))

# 단계별 라벨 설정
labels = {0: 'N3', 1: 'N2', 2: 'N1', 3: 'R', 4: 'W'} 

# 그래프 그리기
plt.figure(figsize=(15, 6))
plt.plot(x, y1, marker='', linestyle='-', label='manual scoring')
plt.plot(x, y2, marker='', linestyle='--', color='red', label='auto scoring')

plt.yticks(ticks=[0, 1, 2, 3, 4], labels=['N3', 'N2', 'N1', 'R', 'W'])

num_points = len(x)
x_labels = np.arange(0, num_points, 60)
x_ticks = [i for i in x_labels]
x_labels = [f"{i//2}" for i in x_labels]

plt.xticks(ticks=x_ticks, labels=x_labels)

plt.xlabel('Time (min)')
plt.ylabel('Sleep Stage')

# 범례 추가
plt.legend(loc='upper left', bbox_to_anchor=(0, 0.9))

# 그리드 추가 (배경 실선 제거)
plt.grid(False)

# 그래프 그리기 및 저장
# plt.savefig('sleep_hypnogram.jpg', dpi=300, bbox_inches='tight')
# plt.show()

 

728x90
반응형
LIST

'Somnology' 카테고리의 다른 글

수면 단계 (Sleep Stage)  (0) 2023.09.08
HRV 점수 계산  (0) 2023.09.04
RR 간격 (RR interval)  (0) 2023.08.22
심박 변이도 (Heart Rate Variability)  (0) 2023.08.22
꿈 회상  (0) 2022.06.22