From d7725857a94194a59f9b977ada661ea9c3b6e54c Mon Sep 17 00:00:00 2001 From: mmmistgun <20172333133@m.scnu.edu.cn> Date: Tue, 29 Mar 2022 22:18:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=BB=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=20=E6=B7=BB=E5=8A=A0=E8=A1=80=E6=B0=A7?= =?UTF-8?q?=E4=BF=A1=E5=8F=B7=E4=B8=8E=E6=A0=87=E7=AD=BE=E7=9A=84=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=20=E8=B0=83=E6=95=B4=E4=BA=86=E4=BF=A1=E5=8F=B7?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F=20=E6=B7=BB=E5=8A=A0=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=20=E6=B7=BB=E5=8A=A0=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Main_Quality_Relabel.py | 41 +++ utils/{Prepare_Data.py => Quality_Relabel.py} | 301 +++++++++--------- 2 files changed, 183 insertions(+), 159 deletions(-) create mode 100644 Main_Quality_Relabel.py rename utils/{Prepare_Data.py => Quality_Relabel.py} (53%) diff --git a/Main_Quality_Relabel.py b/Main_Quality_Relabel.py new file mode 100644 index 0000000..2ca6c30 --- /dev/null +++ b/Main_Quality_Relabel.py @@ -0,0 +1,41 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +""" +@author:Marques +@file:Main_Quality_Relabel.py +@email:admin@marques22.com +@email:2021022362@m.scnu.edu.cn +@time:2022/03/28 +""" +from utils.Quality_Relabel import Quality_Relabel + +# start-----一般不用修改------ +# 绘图时的采样率 +frequency = 100 +# 心晓数据采样率 +bcg_frequency = 1000 +# end-----一般不用修改------ + +# 要遍历的事件 +# 可选一个或多个 "Hypopnea" "Central apnea" "Obstructive apnea" "Mixed apnea" +focus_event_list = ["Obstructive apnea"] +# 信号显示事件前多少秒 +front_add_second = 60 +# 信号显示事件后多少秒 +back_add_second = 60 + +# 样本编号 +sampNo = 670 +# 从第几个心晓事件数量开始 +start_bcg_index = 0 +# 用于心晓信号前面有一部分信号不可用,PSG事件第几个事件对应于心晓第一个事件 +shifting = 0 + +if __name__ == '__main__': + qualityRelabel = Quality_Relabel(sampNo=sampNo, frequency=frequency, bcg_frequency=bcg_frequency, + focus_event_list=focus_event_list) + + qualityRelabel.show_all_event(start_bcg_index=start_bcg_index, + shifting=shifting, + front_add_second=front_add_second, + back_add_second=back_add_second) diff --git a/utils/Prepare_Data.py b/utils/Quality_Relabel.py similarity index 53% rename from utils/Prepare_Data.py rename to utils/Quality_Relabel.py index cfec3b8..7e414aa 100644 --- a/utils/Prepare_Data.py +++ b/utils/Quality_Relabel.py @@ -1,5 +1,5 @@ # -*- coding: cp936 -*- -# ʹgbkʾ +# ʹgbkܶǩ """ @author:Marques @file:Prepare_Data.py @@ -7,9 +7,9 @@ @email:2021022362@m.scnu.edu.cn @time:2022/03/26 """ -from datetime import datetime -from typing import Union, List - +import time +from typing import List +import logging import pyedflib from pathlib import Path import numpy as np @@ -17,32 +17,53 @@ import pandas as pd from matplotlib import pyplot as plt, gridspec from Preprocessing import BCG_Operation from tqdm import tqdm +from datetime import datetime plt.rcParams['font.sans-serif'] = ['SimHei'] # ʾıǩ plt.rcParams['axes.unicode_minus'] = False # ʾ - # ['EEG F3-A2', 'EEG F4-A1', 'EEG C3-A2', 'EEG C4-A1', 'EEG O1-A2', # 'EEG O2-A1', 'EOG Right', 'EOG Left', 'EMG Chin', 'ECG I', 'RR', # 'ECG II', 'Effort Tho', 'Flow Patient', 'Flow Patient', 'Effort Abd', # 'SpO2', 'Pleth', 'Snore', 'Body', 'Pulse', 'Leg LEG1', 'Leg LEG2', # 'EEG A1-A2', 'Imp'] -class Prepare_Data: + +# ־ +logger = logging.getLogger() +logger.setLevel(logging.NOTSET) +realtime = time.strftime('%Y%m%d', time.localtime(time.time())) +fh = logging.FileHandler(Path("../history") / (realtime + ".log"), mode='a') +fh.setLevel(logging.NOTSET) +fh.setFormatter(logging.Formatter("%(asctime)s: %(message)s")) +logger.addHandler(fh) + +ch = logging.StreamHandler() +ch.setLevel(logging.NOTSET) +ch.setFormatter(logging.Formatter("%(asctime)s: %(message)s")) +logger.addHandler(ch) +logging.getLogger('matplotlib.font_manager').disabled = True +logging.info("------------------------------------") + + +class Quality_Relabel: # ѡͨ base_channel = ['EEG F3-A2', 'EEG F4-A1', 'EEG C3-A2', 'EEG C4-A1', 'EEG O1-A2', 'EEG O2-A1', 'EOG Right', 'EOG Left', 'EMG Chin', 'ECG I', 'RR', 'ECG II', 'Effort Tho', 'Flow Patient', 'Flow Patient', 'HR', 'Effort Abd', 'SpO2', 'Pleth', 'Snore', 'Body', 'Pulse', 'Leg LEG1', 'Leg LEG2', 'EEG A1-A2', 'Imp'] # ʾ¼ - base_event = ["Hypopnea", "Central apnea", "Obstructive apnea", "Mixed apnea"] + base_event = ["Hypopnea", "Central apnea", "Obstructive apnea", "Mixed apnea", "Desaturation"] # 趨¼Ӧɫ - # ɫ - # ɫ ͨ - # ɫ - # ɫ - color_cycle = ["blue", "pink", "orange", "red", "red"] + # event_code color event + # 0 ɫ + # 1 ɫ ͨ + # 2 ɫ + # 3 ɫ + # 4 ɫ + # 5 ɫ ѪͶ½ + color_cycle = ["blue", "pink", "orange", "red", "red", "green"] assert len(color_cycle) == len(base_event) + 1, "¼ɫһ" def __init__(self, sampNo: int, frequency: int = 100, bcg_frequency: int = 1000, @@ -67,6 +88,7 @@ class Prepare_Data: # ʾɫʱƥ¼ self.ecg_event_label = None self.bcg_event_label = None + self.spo2_event_label = None # עͣ¼б self.ecg_event_label_filtered_df = None @@ -86,7 +108,7 @@ class Prepare_Data: def check_channel(self): for i in self.channel_list: if i not in self.base_channel: - print(f"{i} ڳͨ") + logging.debug(f"{i} ڳͨ") print(f"ͨ{self.channel_list}") def read_data(self, frequency: int = 100, bcg_frequency: int = 1000): @@ -94,29 +116,32 @@ class Prepare_Data: ecg_path = Path(f"../Data/ECG/A{str(self.sampNo).rjust(7, '0')}.edf") if not bcg_path.exists(): + logging.error(f"{bcg_path} ڣ") raise FileNotFoundError(f"{bcg_path} ڣ") if not ecg_path.exists(): + logging.error(f"{ecg_path} ڣ") raise FileNotFoundError(f"{ecg_path} ڣ") with pyedflib.EdfReader(str(ecg_path.resolve())) as file: signal_num = file.signals_in_file - print(f"{self.sampNo} EDF file signal number is {signal_num}") + logging.debug(f"{self.sampNo} EDF file signal number is {signal_num}") signal_label = file.getSignalLabels() - print(f"{self.sampNo} EDF file signal label : {signal_label}") + logging.debug(f"{self.sampNo} EDF file signal label : {signal_label}") self.ecg_start_time = file.getStartdatetime() # PSG¼¼ self.ecg_event_label = np.zeros(file.getFileDuration() * self.frequency) - + self.spo2_event_label = np.zeros(file.getFileDuration() * self.frequency) # ӡPSGϢ file.file_info_long() # sub_index flow patient sub_index = 1 + logging.info("ȡPSGźš") for i, index in enumerate(signal_label): # ѡеͨ if index in self.channel_list: @@ -124,7 +149,6 @@ class Prepare_Data: if index == 'Flow Patient': index = index + str(sub_index) sub_index += 1 - signal = file.readSignal(i) sample_frequency = file.getSampleFrequency(i) # ȡ ز @@ -133,8 +157,10 @@ class Prepare_Data: elif sample_frequency > frequency: signal = signal[::int(sample_frequency / frequency)] self.signal_select[index] = signal + logging.info(f"ɶȡPSG: {index}") # ź + logging.info("ȡźš") signal = np.load(bcg_path) preprocessing = BCG_Operation(sample_rate=bcg_frequency) # 20Hzͨȥ @@ -156,21 +182,24 @@ class Prepare_Data: ecg_label_path = Path(f"../Data/ECG_label/export{self.sampNo}.csv") if not bcg_label_path.exists(): + logging.error(f"{bcg_label_path} ڣ") raise FileNotFoundError(f"{bcg_label_path} ڣ") if not ecg_label_path.exists(): + logging.error(f"{ecg_label_path} ڣ") raise FileNotFoundError(f"{ecg_label_path} ڣ") df = pd.read_csv(ecg_label_path, encoding='gbk') self.ecg_event_label_df = df # ˲ע¼ - df = df[df["Event type"].isin(self.focus_event_list)] + df2 = df[df["Event type"].isin(self.focus_event_list)] # epochз - df = df.sort_values(by='Epoch') - self.ecg_event_label_filtered_df = df + df2 = df2.sort_values(by='Epoch') + self.ecg_event_label_filtered_df = df2 - for one_data in df.index: + logging.info("PSG¼") + for one_data in tqdm(df.index, ncols=80): one_data = df.loc[one_data] # ͨʼ¼¼ʼ @@ -190,6 +219,8 @@ class Prepare_Data: self.ecg_event_label[SP:EP] = 3 elif one_data["Event type"] == "Mixed apnea": self.ecg_event_label[SP:EP] = 4 + elif one_data["Event type"] == "Desaturation": + self.spo2_event_label[SP:EP] = 5 # ȡ¼ df = pd.read_csv(bcg_label_path, encoding='gbk') @@ -198,11 +229,11 @@ class Prepare_Data: self.bcg_event_label_df = df # ˲ע¼ - df = df[df["Event type"].isin(self.focus_event_list)] - df = df.sort_values(by='Epoch') - self.bcg_event_label_filtered_df = df - - for one_data in df.index: + df2 = df[df["Event type"].isin(self.focus_event_list)] + df2 = df2.sort_values(by='Epoch') + self.bcg_event_label_filtered_df = df2 + logging.info("¼") + for one_data in tqdm(df.index): one_data = df.loc[one_data] SP = one_data["new_start"] * self.frequency EP = one_data["new_end"] * self.frequency @@ -221,17 +252,19 @@ class Prepare_Data: # ¼{len(self.bcg_event_label_filtered_df)}" def show_one_event(self, bcg_index: int, ecg_index: int, front_add_second: int = 60, - back_add_second: int = 60, main_SA_visual: int = 1): + back_add_second: int = 60): """ :param bcg_index: ¼csvк :param ecg_index: PSG¼csv :param front_add_second: ǰʱ :param back_add_second: ʱ - :param main_SA_visual: 1ǰ¼ɫ 0ɫ 2¼ɫ :return: """ - one_bcg_data = self.bcg_event_label_df.loc[bcg_index] - one_ecg_data = self.ecg_event_label_df.loc[ecg_index] + # ȡ¼ʵcsvļе + bcg_real_index = self.bcg_event_label_filtered_df.index[bcg_index], + ecg_real_index = self.ecg_event_label_filtered_df.index[ecg_index], + one_bcg_data = self.bcg_event_label_df.loc[bcg_real_index] + one_ecg_data = self.ecg_event_label_df.loc[ecg_real_index] # ȡECG¼ʼʱ event_start_time = datetime.strptime(one_ecg_data["Date"] + " " + one_ecg_data["Time"], '%Y/%m/%d %H:%M:%S') @@ -243,7 +276,16 @@ class Prepare_Data: bcg_SP = one_bcg_data["new_start"] bcg_EP = one_bcg_data["new_end"] bcg_duration = int(float(str(one_bcg_data["Duration"]).split("(")[0])) - print(ecg_SP, ecg_EP, bcg_SP, bcg_EP) + + logging.info(f"sampNo:{self.sampNo} " + f"bcg[index:{bcg_index} epoch:{one_bcg_data['Epoch']} event:{one_bcg_data['Event type']}] " + f"ecg:[index:{ecg_index} epoch:{one_ecg_data['Epoch']} event:{one_ecg_data['Event type']}]") + + if one_bcg_data['Event type'] != one_ecg_data['Event type']: + logging.error(f"sampNo:{self.sampNo} PSG¼ʱ䲻һ£Ų" + f"bcg[index:{bcg_index} epoch:{one_bcg_data['Epoch']} event:{one_bcg_data['Event type']}] " + f"ecg:[index:{ecg_index} epoch:{one_ecg_data['Epoch']} event:{one_ecg_data['Event type']}]") + raise ValueError() # չ ecg_SP = ecg_SP - front_add_second @@ -253,158 +295,99 @@ class Prepare_Data: # ͼ plt.figure(figsize=(12, 6), dpi=150) - gs = gridspec.GridSpec(7, 1, height_ratios=[1, 1, 1, 3, 1, 1, 1]) + # ͼ֮ı + gs = gridspec.GridSpec(7, 1, height_ratios=[1, 1, 1, 1, 1, 3, 1]) plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) plt.margins(0, 0) plt.tight_layout() + # Flow1 plt.subplot(gs[0]) - # ['Effort Tho', 'Effort Abd', 'SpO2', 'Flow Patient', 'Flow Patient'] - plt.plot(np.linspace(ecg_SP, ecg_EP, (ecg_EP - ecg_SP) * self.frequency), - self.signal_select["Effort Tho"][ecg_SP * self.frequency:ecg_EP * self.frequency], label="Effort Tho") - # ¼ɫע - for j in range(1, 5): - mask = self.ecg_event_label[ecg_SP * self.frequency:ecg_EP * self.frequency] == j - y = (self.signal_select["Effort Tho"][ecg_SP * self.frequency:ecg_EP * self.frequency] * mask).astype( - 'float') - np.place(y, y == 0, np.nan) - plt.plot(np.linspace(ecg_SP, ecg_EP, (ecg_EP - ecg_SP) * self.frequency), y, color=self.color_cycle[j]) - # ʾͼע - plt.legend(loc=1) - - # زֱ߿ - ax = plt.gca() - ax.spines["top"].set_visible(False) - ax.spines["right"].set_visible(False) - ax.spines["bottom"].set_visible(False) - # ȥx - plt.xticks([]) + self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Flow Patient1") + # Flow2 plt.subplot(gs[1]) - # ['Effort Tho', 'Effort Abd', 'SpO2', 'Flow Patient', 'Flow Patient'] - plt.plot(np.linspace(ecg_SP, ecg_EP, (ecg_EP - ecg_SP) * self.frequency), - self.signal_select["Effort Abd"][ecg_SP * self.frequency:ecg_EP * self.frequency], label="Effort Abd") - for j in range(1, 5): - mask = self.ecg_event_label[ecg_SP * self.frequency:ecg_EP * self.frequency] == j - y = (self.signal_select["Effort Abd"][ecg_SP * self.frequency:ecg_EP * self.frequency] * mask).astype( - 'float') - np.place(y, y == 0, np.nan) - plt.plot(np.linspace(ecg_SP, ecg_EP, (ecg_EP - ecg_SP) * self.frequency), y, color=self.color_cycle[j]) - - plt.title(f"sampNo:{self.sampNo} Epoch:{one_ecg_data['Epoch']} Duration:{one_ecg_data['Duration']}") - plt.legend(loc=1) - ax = plt.gca() - ax.spines["top"].set_visible(False) - ax.spines["right"].set_visible(False) - ax.spines["bottom"].set_visible(False) - plt.xticks([]) + self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Flow Patient2", + title=f"PSG sampNo:{self.sampNo} Epoch:{one_ecg_data['Epoch']} Duration:{one_ecg_data['Duration']}") plt.subplot(gs[2]) - # ['Effort Tho', 'Effort Abd', 'SpO2', 'Flow Patient', 'Flow Patient'] - plt.plot(np.linspace(bcg_SP, bcg_EP, (bcg_EP - bcg_SP) * self.frequency), - self.signal_select["xin_xiao_respire"][bcg_SP * self.frequency:bcg_EP * self.frequency], label=" ") - - min_bcg = self.signal_select["xin_xiao_respire"][bcg_SP * self.frequency:bcg_EP * self.frequency].min() - len_bcg = bcg_EP * self.frequency - bcg_SP * self.frequency - for j in range(1, 5): - mask = self.bcg_event_label[bcg_SP * self.frequency:bcg_EP * self.frequency] == j - y = (min_bcg.repeat(len_bcg) * mask).astype('float') - np.place(y, y == 0, np.nan) - plt.plot(np.linspace(bcg_SP, bcg_EP, (bcg_EP - bcg_SP) * self.frequency), y, color=self.color_cycle[j]) - # plt.title(f"sampNo:{self.sampNo} Epoch:{one_bcg_data['Epoch']} Duration:{one_bcg_data['Duration']}") - plt.legend(loc=1) - ax = plt.gca() - ax.spines["top"].set_visible(False) - ax.spines["right"].set_visible(False) - ax.spines["bottom"].set_visible(False) - plt.xticks([]) + self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Effort Tho") plt.subplot(gs[3]) - # ['Effort Tho', 'Effort Abd', 'SpO2', 'Flow Patient', 'Flow Patient'] - plt.plot(np.linspace(bcg_SP, bcg_EP, (bcg_EP - bcg_SP) * self.frequency), - self.signal_select["xin_xiao"][bcg_SP * self.frequency:bcg_EP * self.frequency], label="") - - min_bcg = self.signal_select["xin_xiao"][bcg_SP * self.frequency:bcg_EP * self.frequency].min() - len_bcg = bcg_EP * self.frequency - bcg_SP * self.frequency - for j in range(1, 5): - mask = self.bcg_event_label[bcg_SP * self.frequency:bcg_EP * self.frequency] == j - y = (min_bcg.repeat(len_bcg) * mask).astype('float') - np.place(y, y == 0, np.nan) - plt.plot(np.linspace(bcg_SP, bcg_EP, (bcg_EP - bcg_SP) * self.frequency), y, color=self.color_cycle[j]) - plt.title(f"sampNo:{self.sampNo} Epoch:{one_bcg_data['Epoch']} Duration:{one_bcg_data['Duration']}") - plt.legend(loc=1) - ax = plt.gca() - ax.spines["top"].set_visible(False) - ax.spines["right"].set_visible(False) - ax.spines["bottom"].set_visible(False) - plt.xticks([]) # ȥx + self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Effort Abd") plt.subplot(gs[4]) - # ['Effort Tho', 'Effort Abd', 'SpO2', 'Flow Patient', 'Flow Patient'] - plt.plot(np.linspace(ecg_SP, ecg_EP, (ecg_EP - ecg_SP) * self.frequency), - self.signal_select["Flow Patient1"][ecg_SP * self.frequency:ecg_EP * self.frequency], - label="Flow Patient1") - - for j in range(1, 5): - mask = self.ecg_event_label[ecg_SP * self.frequency:ecg_EP * self.frequency] == j - y = (self.signal_select["Flow Patient1"][ecg_SP * self.frequency:ecg_EP * self.frequency] * mask).astype( - 'float') - np.place(y, y == 0, np.nan) - plt.plot(np.linspace(ecg_SP, ecg_EP, (ecg_EP - ecg_SP) * self.frequency), y, color=self.color_cycle[j]) - plt.legend(loc=1) - ax = plt.gca() - ax.spines["top"].set_visible(False) - ax.spines["right"].set_visible(False) - ax.spines["bottom"].set_visible(False) - plt.xticks([]) # ȥx + self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="SpO2", event_code=[5]) plt.subplot(gs[5]) - # ['Effort Tho', 'Effort Abd', 'SpO2', 'Flow Patient', 'Flow Patient'] - plt.plot(np.linspace(ecg_SP, ecg_EP, (ecg_EP - ecg_SP) * self.frequency), - self.signal_select["Flow Patient2"][ecg_SP * self.frequency:ecg_EP * self.frequency], - label="Flow Patient2") - - for j in range(1, 5): - mask = self.ecg_event_label[ecg_SP * self.frequency:ecg_EP * self.frequency] == j - y = (self.signal_select["Flow Patient2"][ecg_SP * self.frequency:ecg_EP * self.frequency] * mask).astype( - 'float') - np.place(y, y == 0, np.nan) - plt.plot(np.linspace(ecg_SP, ecg_EP, (ecg_EP - ecg_SP) * self.frequency), y, color=self.color_cycle[j]) - plt.legend(loc=1) - ax = plt.gca() - ax.spines["top"].set_visible(False) - ax.spines["right"].set_visible(False) - ax.spines["bottom"].set_visible(False) - plt.xticks([]) + self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="xin_xiao", event_show_under=True) plt.subplot(gs[6]) - # ['Effort Tho', 'Effort Abd', 'SpO2', 'Flow Patient', 'Flow Patient'] - plt.plot(np.linspace(ecg_SP, ecg_EP, (ecg_EP - ecg_SP) * self.frequency), - self.signal_select["SpO2"][ecg_SP * self.frequency:ecg_EP * self.frequency], label="SpO2") - plt.legend(loc=1) - ax = plt.gca() - ax.spines["top"].set_visible(False) - ax.spines["right"].set_visible(False) - ax.spines["bottom"].set_visible(False) - plt.xticks([]) + self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="xin_xiao_respire", event_show_under=True, + ax_bottom=True, + title=f" sampNo:{self.sampNo} Epoch:{one_bcg_data['Epoch']} Duration:{one_bcg_data['Duration']}", + ) plt.show() - def show_all_event(self, start_index: int = 0, shifting: int = 0, front_add_second: int = 60, - back_add_second: int = 60, main_SA_visual: int = 1): + def plt_channel(self, plt_, SP, EP, channel, event_code=[1, 2, 3, 4], event_show_under=False, + ax_top=False, ax_bottom=False, ax_left=True, ax_right=False, title=None): + """ - for index in range(start_index, len(self.bcg_event_label_filtered_df)): - self.show_one_event(self.bcg_event_label_filtered_df.index[index], - self.ecg_event_label_filtered_df.index[index + shifting], + :param plt_: + :param SP: ʾʼ + :param EP: ʾ + :param channel: ͨ + :param event_code: Ҫɫ¼ + :param event_show_under: ¼ɫʾź + :param ax_top: ʾϿ + :param ax_bottom: ʾ¿ + :param ax_left: ʾ + :param ax_right: ʾҿ + :param title: ʾ + :return: + """ + plt_.plot(np.linspace(SP, EP, (EP - SP) * self.frequency), + self.signal_select[channel][SP * self.frequency:EP * self.frequency], label=channel) + + for j in event_code: + if channel == "SpO2": + mask = self.spo2_event_label[SP * self.frequency:EP * self.frequency] == j + else: + mask = self.ecg_event_label[SP * self.frequency:EP * self.frequency] == j + if event_show_under: + min_point = self.signal_select[channel][SP * self.frequency:EP * self.frequency].min() + len_segment = EP * self.frequency - SP * self.frequency + y = (min_point.repeat(len_segment) * mask).astype('float') + np.place(y, y == 0, np.nan) + else: + y = (self.signal_select[channel][SP * self.frequency:EP * self.frequency] * mask).astype('float') + np.place(y, y == 0, np.nan) + plt_.plot(np.linspace(SP, EP, (EP - SP) * self.frequency), y, color=self.color_cycle[j]) + plt_.legend(loc=1) + + if title is not None: + plt_.title(title) + ax = plt.gca() + ax.spines["top"].set_visible(ax_top) + ax.spines["right"].set_visible(ax_right) + ax.spines["bottom"].set_visible(ax_bottom) + ax.spines["left"].set_visible(ax_left) + # xticks = [[]] if xticks else [range(SP, EP, 5), [str(i) for i in range(0, (EP - SP), 5)]] + # print(xticks) + # plt_.xticks(*xticks) # ȥx + + def show_all_event(self, start_bcg_index: int = 0, shifting: int = 0, front_add_second: int = 60, + back_add_second: int = 60): + + for index in range(start_bcg_index, len(self.bcg_event_label_filtered_df)): + self.show_one_event(index, + index + shifting, front_add_second=front_add_second, - back_add_second=back_add_second, - main_SA_visual=main_SA_visual + back_add_second=back_add_second ) - def get_fft(self): - pass - if __name__ == '__main__': - prepareData = Prepare_Data(670) + prepareData = Quality_Relabel(670) prepareData.show_all_event()