我有下面的 Dataframe ,其中包含了作为时间序列的阶段信息:
import pandas as pd
d = {'Stages': ['Stage 1', 'Stage 2', 'Stage 2', 'Stage 2', 'Stage 3', 'Stage 1'], 'Start(s)': [0, 630, 780, 840, 900, 930], 'End(s)': [630, 780, 840, 900, 930, 960]}
df = pd.DataFrame(data=d)
Stages Start(s) End(s)
0 Stage 1 0 630
1 Stage 2 630 780
2 Stage 2 780 840
3 Stage 2 840 900
4 Stage 3 900 930
5 Stage 1 930 960
我想获得如here所示的阶跃图,所以我这样做:
#Replacing the string stages
mapping = {'Stage 1': 1, 'Stage 2': 2,'Stage 3': 3}
DF = df.replace({'Stages': mapping})
这给了我
Stages Start(s) End(s)
0 1 0 630
1 2 630 780
2 2 780 840
3 2 840 900
4 3 900 930
5 1 930 960
有人能告诉我如何获得像this这样的图吗?
2条答案
按热度按时间qnzebej01#
IIUC,您可以使用
yasa.plot_hypnogram
。试试这个:
#输出:
-2 =未评分-1 =伪影/运动0 =唤醒1 = N1睡眠2 = N2睡眠3 = N3睡眠4 = REM睡眠
注意:您可能需要使用Python版本(
>=3.7
,<3.11
)来安装所有的yasa
依赖项。Python版本(3.11.0
)似乎还不受支持。nnsrf1az2#
我的第一个想法是使用"steps" drawstyle provided by matploltib,如果你使用它,你几乎可以只在“End(s)”列中绘制值--问题是你需要将第一个开始时间/阶段前置到要绘制的值列表中:
这大概是最低限度;它忽略了特定于睡眠周期的特定格式,相反,它希望向您展示如何“从头开始”绘制所需的曲线。
补充说明:
plt.yticks([1, 2, 3], ['a', 'b', 'c'])
对其进行重命名。plt.yticks
更改它们的名称。