针对MNE画脑电地形图出现ValueError: DigMontage is only a subset of info问题
腦電地形圖的繪制對后面的ICA分析挺有用的,所以想自己學會繪制。
Python中MNE庫的腦電地形圖繪制我是從這里面了解到可以直接用一條代碼即可。
我直接用下面這條代碼,就出現了ValueError: DigMontage is only a subset of info. There are 22 channel positions not present in the DigMontage. The required channels are:
這個問題,這個問題說是:ch_names中的你寫的各通道名稱不是標準名稱。
不過要用上面這條代碼有個小前提,就是需要有你的腦電數據的各電極位置,如:我是從bci_IV_2a中獲得數據,這個desc_2a.pdf有各通道的電極位置,如下圖就是各通道的電極位置。
有了各電極的位置,就可以將通道名稱按順序改為標準的通道名稱。上圖電極位置標準是采用國際10/20系統,關于國際10/20系統的一些介紹可以看下添加鏈接描述和添加鏈接描述
解決流程:
1從含有標準電極位置圖找到下面這張圖
**2:**按著上面標準的電極位置,將自己數據的各通道也改為標準的,如'EEG-Fz', 'EEG-0', 'EEG-1', 'EEG-2', 'EEG-3', 'EEG-4', 'EEG-5', 'EEG-C3', 'EEG-6', 'EEG-Cz', 'EEG-7', 'EEG-C4', 'EEG-8', 'EEG-9', 'EEG-10', 'EEG-11', 'EEG-12', 'EEG-13', 'EEG-14', 'EEG-Pz', 'EEG-15', 'EEG-16'我的數據里默認的通道名稱是這樣的,
所以要按順序改為標準的:'Fz', 'FC3', 'FC1', 'FCz', 'FC2', 'FC4', 'C5', 'C3', 'C1', 'Cz', 'C2', 'C4', 'C6', 'CP3', 'CP1','CPz', 'CP2', 'CP4', 'P1', 'Pz', 'P2', 'POz'這就是我按順序改的
具體的代碼是:
原本的代碼
改了后的代碼
ch_names=['Fz', 'FC3', 'FC1', 'FCz', 'FC2', 'FC4', 'C5', 'C3', 'C1', 'Cz', 'C2', 'C4', 'C6', 'CP3', 'CP1','CPz', 'CP2', 'CP4', 'P1', 'Pz', 'P2', 'POz']之后在加上下面這條代碼就不會報錯,
info.set_montage('standard_1020')我的數據集是BCI_Competition_IV_dataSet 2,可以從BCI_Competition_IV中獲得
整個代碼下面也會提供,下面這個代碼是從.gdf中獲得數據,通道名稱等,利用MNE庫構造raw,最后顯示腦電數據。要利用MNE庫繪出腦電地形圖,需要將數據構造為raw,epochs等格式。
import mne import matplotlib.pyplot as plt import pandas as pd import numpy as np from mne.preprocessing import (ICA, create_eog_epochs, create_ecg_epochs,corrmap) # path='F:/python_test/CNN-test/Deep-Learning-BCI-IV-2a-master/1111111111111python_test/Escalgrams_CWT/CWT_CNN/dataset/' # y_train=pd.read_csv(path+'A01T-labbel.txt',header=None)filename='E:/軟件安裝/python1111111111111111/dataset/2008_BCI_Competition_IV/BCI_Competition_IV_dataSet 2/' raw=mne.io.read_raw_gdf(filename+'A01T.gdf') # #['EEG-Fz', 'EEG-0', 'EEG-1', 'EEG-2', 'EEG-3', 'EEG-4', 'EEG-5', 'EEG-C3', 'EEG-6', 'EEG-Cz', 'EEG-7', 'EEG-C4', 'EEG-8', 'EEG-9', 'EEG-10', # 'EEG-11', 'EEG-12', 'EEG-13', 'EEG-14', 'EEG-Pz', 'EEG-15', 'EEG-16', 'EOG-left', 'EOG-central', 'EOG-right'] # events1,event1_id=mne.events_from_annotations(raw) print(events1,'111111',event1_id) print(raw.info['ch_names']) raw.drop_channels(['EOG-left', 'EOG-central', 'EOG-right']) data=raw.get_data() print(data.shape) #'Fz', 'FC3', 'FC1', 'FCz', 'FC2', 'FC4', 'C5', 'C3', 'C1', 'Cz', 'C2', 'C6', 'CP3', 'CP1', 'CPz', #'CP2', 'CP4', 'CP6', 'P1', 'Pz', 'P2', 'POz' ch_names=['Fz', 'FC3', 'FC1', 'FCz', 'FC2', 'FC4', 'C5', 'C3', 'C1', 'Cz', 'C2', 'C4', 'C6', 'CP3', 'CP1','CPz', 'CP2', 'CP4', 'P1', 'Pz', 'P2', 'POz'] sfreq=raw.info['sfreq'] ch_types=['eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg','eeg'] info=mne.create_info(ch_names=ch_names,ch_types=ch_types,sfreq=sfreq) info.set_montage('standard_1020')custom_raw=mne.io.RawArray(data,info) custom_raw.plot(show_scrollbars=False,show_scalebars=False) plt.show()通過解決這些問題我也知道了問題基本上都能自己解決,要耐下心來,好好找資料,不斷的嘗試,總會解決問題的。
總結
以上是生活随笔為你收集整理的针对MNE画脑电地形图出现ValueError: DigMontage is only a subset of info问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VUE系列——弹窗代码编写与调用弹窗过程
- 下一篇: 图像插值处理