MNE学习笔记(六):Epoched data的可视化
MNE学习笔记(六):Epoched data的可视化
参考文章:https://mne.tools/stable/auto_tutorials/epochs/20_visualize_epochs.html
准备工作
包括
- 导包
- 加载
这个部分之前已经有详细地说明了,如果有疑惑可以去看MNE学习笔记(三):Epoch数据结构,这里就直接给出代码:
import os
import mne
from matplotlib import pyplot as plt# 如果没有数据则用这个自动下载
# sample_data_folder = mne.datasets.sample.data_path()
# 已有数据,则直接加载即可
sample_data_folder = "D:\Data\MNE-sample-data"
sample_data_raw_file = os.path.join(sample_data_folder, 'MEG', 'sample','sample_audvis_raw.fif')
raw = mne.io.read_raw_fif(sample_data_raw_file, verbose=False).crop(tmax=120)events = mne.find_events(raw, stim_channel='STI 014')
event_dict = {'auditory/left': 1, 'auditory/right': 2, 'visual/left': 3,'visual/right': 4, 'face': 5, 'button': 32}
epochs = mne.Epochs(raw, events, tmin=-0.2, tmax=0.5, event_id=event_dict,preload=True)
del raw
from matplotlib import pyplot as plt
官方文档中是没有这个的,建议还是加上,不然画出的图像会闪退
输出为类似这样的即可:
将Epochs可视化为时间序列
对于每一个channel都用一个时间序列来表示,下面我们来绘制磁力仪通道中的心跳伪影(heartbeat artifacts in the magnetometer channels)
代码:
# 可视化为时间序列
catch_trials_and_buttonpresses = mne.pick_events(events, include=[5, 32])
epochs['face'].plot(events=catch_trials_and_buttonpresses, event_id=event_dict,event_color=dict(button='red', face='blue'))
plt.show()
结果:
如果要一次查看所有sensors,则可以使用butterfly mode
和group by selection
代码:
# 一次显示所有sensors
epochs['face'].plot(events=catch_trials_and_buttonpresses, event_id=event_dict,event_color=dict(button='red', face='blue'),group_by='selection', butterfly=True)
plt.show()
结果:(在上面的图的基础上还会出现下图)
通过epochs对象绘制projectors
从磁盘上装入心电图projectors,并将其应用到数据中(load ECG projectors from disk and apply them to the data)
代码:
ecg_proj_file = os.path.join(sample_data_folder, 'MEG', 'sample','sample_audvis_ecg-proj.fif')
ecg_projs = mne.read_proj(ecg_proj_file)
epochs.add_proj(ecg_projs)
epochs.apply_proj()
结果:
由于原来的三个empty-room magnetometer projectors继承自Raw文件,我们为每个sensor类型增加了两个ECG projectors,我们应该看到9个projector地形图:
代码:
# 绘制地形图
epochs.plot_projs_topomap(vlim='joint')
print(all(proj['active'] for proj in epochs.info['projs']))
plt.show()
结果:(print结果为true
)
绘制sensor位置
代码:
# 绘制sensor位置
epochs.plot_sensors(kind='3d', ch_type='all')
epochs.plot_sensors(kind='topomap', ch_type='all')
plt.show()
结果:
绘制Epochs的功率谱
代码:
# 绘制Epochs的功率谱
epochs['auditory'].plot_psd(picks='eeg')
plt.show()
结果:
还可以使用plot_psd_topomap,将sensors之间的光谱估计值作为头皮地形图(scalp topography)绘制出来。
代码:
# 绘制scalp topography
epochs['visual/right'].plot_psd_topomap()
plt.show()
结果:
与plot_projs_topomap
一样,plot_psd_topomap
有一个vlim='joint'
选项,用于在所有子图上共同固定颜色栏限制,以便更好地了解每个波段的相对大小。可以通过ch_type
参数更改 channel 类型,如果想查看与默认值不同的频带,bands
参数有一个元组的列表,每个元组包含一个 single frequency 和 subplot title ,或 lower / upper 频率限制和一个subplot title:
代码:
bands = [(10, '10 Hz'), (15, '15 Hz'), (20, '20 Hz'), (10, 20, '10-20 Hz')]
epochs['visual/right'].plot_psd_topomap(bands=bands,vlim='joint', ch_type='grad')
plt.show()
结果:
如果喜欢untransformed power estimates,也可以设置dB=False
;通过normalize=True
可以通过除以所有频率的总功率,使功率估计归一化。
图像映射(image map)
这部分我就直接翻译MNE官方教程文档了
同时可视化多个Epochs的一种方便的方法是将它们绘制成图像映射,图像中的每一行像素代表一个历元,横轴代表时间,每个像素的颜色代表该历元在该时间样本中的信号值。
当然,这需要为每个通道提供一个单独的图像映射,或者以某种方式组合跨通道的信息。 后者可以使用plot_image方法; 前者可以通过plot_image方法(一次一个通道)或plot_topo_image方法(一次所有传感器)来实现。
默认情况下,由plot_image生成的图像映射将伴随着一个指示颜色映射范围的标尺,一个时间序列,显示Epochs间的平均信号,以及一个围绕平均值的引导95%置信区间。
Plot_image是一个具有许多参数的高度可定制的方法,包括辅助颜色条和平均时间序列子图的定制。 参见plot_image和mne.viz的文档字符串。
Plot_compare_evokeds(用于绘制平均时间序列)以获得完整的细节。 在这里,我们将展示在有听觉刺激的情况下所有时期的磁强计平均值:
代码:
# 有听觉刺激的情况下所有时期的磁强计平均值
epochs['auditory'].plot_image(picks='mag', combine='mean')
plt.show()
结果:
若要绘制单个sensors或一小组sensors的image map,请使用picks
参数。
传入combine=None
(默认值)将为picks
中的每个sensor生成单独的plots; 通过combine='gfp'
将绘制出全局场功率(用于组合极性相反的sensors)。
代码:
# combine = 'gfp'
epochs['auditory'].plot_image(picks=['MEG 0242', 'MEG 0243'])
epochs['auditory'].plot_image(picks=['MEG 0242', 'MEG 0243'], combine='gfp')
plt.show()
结果:
为了给所有sonsers绘制image map,可以使用对同时绘制大量image maps进行优化过且允许你对每一个小image map进行点击从而生成一个单独的图与全尺寸图像图的plot_topo_image
。
这部分中显示的小范围中,很难在这些图中看到很多有用的细节; 在交互式绘图时,最好将拓扑图最大化为全屏。默认情况下是一个带有黑色背景的图形,所以这里我们指定一个白色背景和黑色前景文本。 默认情况下,plot_topo_image将在同一plot上显示磁力计和梯度计(magnetometers and gradiometers)(不显示颜色条,因为传感器的比例不同),所以我们还将传递一个Layout
,将每个plot限制为一种channel类型。 然而,我们得先删除任何具有异常高信号水平的epochs,因为它们可能导致颜色图限制太极端,因此掩盖了我们感兴趣的较小信号波动。
代码:
# 交互图
reject_criteria = dict(mag=3000e-15, # 3000 fTgrad=3000e-13, # 3000 fT/cmeeg=150e-6) # 150 µV
epochs.drop_bad(reject=reject_criteria)for ch_type, title in dict(mag='Magnetometers', grad='Gradiometers').items():layout = mne.channels.find_layout(epochs.info, ch_type=ch_type)epochs['auditory/left'].plot_topo_image(layout=layout, fig_facecolor='w',font_color='k', title=title)
plt.show()
结果:
点击其中一个后:
点击其中一个后:
这里只截取了部分
要绘制所有EEG sensors的image map,需要将EEG layout作为plot_topo_image
的layout
参数。 还要注意这里对每个image map在竖直维度进行了平滑(across epochs)的sigma
参数的使用,它可以让我们更容易看见small image maps的patterns(通过smear嘈杂的epochs到他们的邻居,同时加强相邻epochs相似的部分图像)。 然而,sigma
也可以掩盖有持续的极端值的时代,也许应该被排除,所以应该谨慎使用。
代码:
结果:
单击其中一种后:
完整代码
import os
import mne
from matplotlib import pyplot as plt# 如果没有数据则用这个自动下载
# sample_data_folder = mne.datasets.sample.data_path()
# 已有数据,则直接加载即可
sample_data_folder = "D:\Data\MNE-sample-data"
sample_data_raw_file = os.path.join(sample_data_folder, 'MEG', 'sample','sample_audvis_raw.fif')
raw = mne.io.read_raw_fif(sample_data_raw_file, verbose=False).crop(tmax=120)events = mne.find_events(raw, stim_channel='STI 014')
event_dict = {'auditory/left': 1, 'auditory/right': 2, 'visual/left': 3,'visual/right': 4, 'face': 5, 'button': 32}
epochs = mne.Epochs(raw, events, tmin=-0.2, tmax=0.5, event_id=event_dict,preload=True)
del raw# 可视化为时间序列
catch_trials_and_buttonpresses = mne.pick_events(events, include=[5, 32])
epochs['face'].plot(events=catch_trials_and_buttonpresses, event_id=event_dict,event_color=dict(button='red', face='blue'))
plt.show()# 一次显示所有sensors
epochs['face'].plot(events=catch_trials_and_buttonpresses, event_id=event_dict,event_color=dict(button='red', face='blue'),group_by='selection', butterfly=True)
plt.show()# projectors
ecg_proj_file = os.path.join(sample_data_folder, 'MEG', 'sample','sample_audvis_ecg-proj.fif')
ecg_projs = mne.read_proj(ecg_proj_file)
epochs.add_proj(ecg_projs)
epochs.apply_proj()# 绘制地形图
epochs.plot_projs_topomap(vlim='joint')
print(all(proj['active'] for proj in epochs.info['projs']))
plt.show()# 绘制sensor位置
epochs.plot_sensors(kind='3d', ch_type='all')
epochs.plot_sensors(kind='topomap', ch_type='all')
plt.show()# 绘制Epochs的功率谱
epochs['auditory'].plot_psd(picks='eeg')
plt.show()# 绘制scalp topography
epochs['visual/right'].plot_psd_topomap()
plt.show()bands = [(10, '10 Hz'), (15, '15 Hz'), (20, '20 Hz'), (10, 20, '10-20 Hz')]
epochs['visual/right'].plot_psd_topomap(bands=bands,vlim='joint', ch_type='grad')
plt.show()# 有听觉刺激的情况下所有时期的磁强计平均值
epochs['auditory'].plot_image(picks='mag', combine='mean')
plt.show()# combine = 'gfp'
epochs['auditory'].plot_image(picks=['MEG 0242', 'MEG 0243'])
epochs['auditory'].plot_image(picks=['MEG 0242', 'MEG 0243'], combine='gfp')
plt.show()# 交互图
reject_criteria = dict(mag=3000e-15, # 3000 fTgrad=3000e-13, # 3000 fT/cmeeg=150e-6) # 150 µV
epochs.drop_bad(reject=reject_criteria)for ch_type, title in dict(mag='Magnetometers', grad='Gradiometers').items():layout = mne.channels.find_layout(epochs.info, ch_type=ch_type)epochs['auditory/left'].plot_topo_image(layout=layout, fig_facecolor='w',font_color='k', title=title)
plt.show()layout = mne.channels.find_layout(epochs.info, ch_type='eeg')
epochs['auditory/left'].plot_topo_image(layout=layout, fig_facecolor='w',font_color='k', sigma=1)
plt.show()
MNE学习笔记(六):Epoched data的可视化相关推荐
- MNE学习笔记(四):Evoked数据结构
MNE学习笔记(四):Evoked数据结构 参考文章: https://mp.weixin.qq.com/s/Udr0qBvspyKVjASdgL-QxQ https://mne.tools/stab ...
- Ethernet/IP 学习笔记六
Ethernet/IP 学习笔记六 EtherNet/IP defines two primary types of communications: explicit and implicit (Ta ...
- Caffe学习笔记4图像特征进行可视化
Caffe学习笔记4图像特征进行可视化 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit201 ...
- 吴恩达《机器学习》学习笔记六——过拟合与正则化
吴恩达<机器学习>学习笔记六--过拟合与正则化 一. 过拟合问题 1.线性回归过拟合问题 2.逻辑回归过拟合问题 3.过拟合的解决 二. 正则化后的代价函数 1.正则化思想 2.实际使用的 ...
- ROS学习笔记六:理解ROS服务和参数
ROS学习笔记六:理解ROS服务和参数 主要介绍ROS服务和参数,同时使用命令行工具rosservice和rosparam. ROS service service是节点之间互相通信的另一种方式,se ...
- opencv 手选roi区域_【opencv学习笔记六】图像的ROI区域选择与复制
图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...
- JS学习笔记六:js中的DOM操作
1. JS学习笔记六:js中的DOM操作 文章目录 1. JS学习笔记六:js中的DOM操作 1.1. 获取Dom节点 1.2. 元素属性的操作方式 1.3. DOM节点的创建.插入和删除 1.4. ...
- Python学习笔记六——画小猪佩奇
目录 Python学习笔记六--画小猪佩奇 画布 画笔 属性设置 操纵命令 运动命令 画笔控制命令 全局控制命令 其他命令 Python学习笔记六--画小猪佩奇 使用Python的turtle库可以绘 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(六) indigo xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...
最新文章
- Eigen:C++中Eigen库的安装与学习
- Ubuntu14.04 LTS中升级gcc/g++版本到4.9.4的操作步骤
- 探究被Win7保留的100MB活动分区
- 了解大脑的“小情绪”,轻松成为“效率达人”
- java中的二进制运算简单理解
- 深入讲解配置Cisco路由器日志中的速率限制问题(三)
- Kernel 社区 开发准备工作mutt 邮件使用
- python—多线程之数据混乱问题
- Three.js中使用材质覆盖属性
- asp.net mvc脚手架代码生成工具
- 微信小程序的不同函数调用的几种方法
- 案例解析|广东自由流收费稽核方案,AI稽核新模式
- Google Web Brower
- 2. Browser 对象 - Window 对象(2)
- C#进行MapX二次开发之地图搜索
- AI智能语音系统,智能语音机器人详解
- webassembly介绍
- [LeetCode] Largest Perimeter Triangle
- xp计算机加域找不到网络路径,手把手为您win10系统计算机加域提示错误“找不到网络路径”的方法...
- What Is New About NewSQL(NewSQL的独到之处)?
热门文章
- Python获取英雄联盟的皮肤原画:新手玩家们都懵了!(一)
- 狐狸文│区块链不是用来讲故事的
- 上交大计算机科学与技术,上海交通大学计算机科学与工程系(CSE)
- python 日期运算_Python中关于日期的计算总结
- 计算机专业国考录取比例,国考招录中,报考人数近18万,有3类专业成功几率高...
- ardruino控制继电器_Arduino基础入门篇24—继电器控制
- 1.1什么是DHTML
- 手机通过笔记本设置AP(wifi 热点)上网 intel5100 agn 无线网卡 win7系统
- 写作活动第三期!让我们再挣200元稿费吧!
- 数据预处理部分的思维导图