本教程展示了如何将连续数据绘制为时间序列,如何绘制连续数据的谱密度,以及如何绘制存储在raw对象中的传感器位置和projectors。
像往常一样,我们首先导入:
1 | import os |
Opening raw data file /home/circleci/mne_data/MNE-sample-data/MEG/sample/sample_audvis_raw.fif…
Read a total of 3 projection items:
PCA-v1 (1 x 102) idle
PCA-v2 (1 x 102) idle
PCA-v3 (1 x 102) idle
Range : 25800 … 192599 = 42.956 … 320.670 secs
Ready.
Reading 0 … 36037 = 0.000 … 60.000 secs…
在前面的教程中,我们已经看到如何使用matplotlib
从raw对象绘制数据,但raw对象也有几个内置的绘图方法:
plot
plot_sensors
plot_projs_topomap
这里详细讨论了第一个;最后两个在其他教程中简要展示并深入介绍。本教程还介绍了几种绘制raw数据频谱内容的方法。
使用raw.plot()
进行交互式数据浏览
Raw对象的plot
方法为探索连续数据提供了一个通用接口。对于交互式查看和数据质量检查,调用它时不需要额外的参数:
1 | raw.plot() |
它沿着y轴等距排列通道。默认显示20个通,你可以使用↑
和↓
箭头键滚动通道,或者点击绘图右侧的彩色滚动条。可见通道的数量可以通过n_channels
参数调整,也可以使用page up
和page down
键交互式地改变。你可以通过按b
切换到”butterfly”模式(将所有相同类型的通道叠加在一起),也可以通过传递参数butterfly=True
来切换到butterfly模式。
它显示raw对象的前10秒。你可以使用home
键和end
键来缩短或延长窗口长度,也可以通过传入duration
参数以特定的窗口时长开始。您可以使用←
和→
箭头键在时域中滚动,或者通过传递start
参数从特定的点开始。使用shift→
或shift←
滚动一次整个窗口宽度。
它允许点击频道来标记/取消标记为“坏通道”。当绘图窗口关闭时,Raw对象的info属性将被更新,从info对象的bads字段Raw .info['bads']
添加或删除新(未)标记的通道。
它允许对原始数据进行交互式注释。按“a”键可进入“注释模式”。上一章已经讲过。
在绘制数据之前,它会自动应用任何projectors
。可以通过单击绘图窗口右下角的Proj
按钮来交互式地启用/禁用它们,或者通过传递Proj =False
参数来默认禁用它们。
绘制功率谱密度
为了可视化连续数据的频率内容,raw对象提供了compute_psd()
方法来计算功率谱密度,得到的谱对象有plot()
方法:
1 | spectrum = raw.compute_psd() |
Effective window size : 3.410 (s)
Plotting power spectral density (dB=True).
如果数据已经被滤波,垂直的虚线将自动指示滤波器的边界。每种通道类型的频谱绘制在其自己的子图中。在这里,我们传递了average=True
参数,以获得每种通道类型的汇总,但也可以单独绘制每个通道,并可以选择如何计算频谱,根据位置对通道进行颜色编码等。
例如,下面是一个只有几个传感器的绘图(用picks
参数指定),按空间位置进行颜色编码:
1 | midline = ["EEG 002", "EEG 012", "EEG 030", "EEG 048", "EEG 058", "EEG 060"] |
midline = [“EEG 002”, “EEG 012”, “EEG 030”, “EEG 048”, “EEG 058”, “EEG 060”]
spectrum.plot(picks=midline, exclude=”bads”, amplitude=False)
使用频谱的plot_topomap()
方法,也可以绘制跨传感器的频谱功率估计作为头皮地形。默认参数将绘制5个频带(δ, θ, α, β, γ),将根据磁强计通道计算功率(如果存在),并将在类似db的对数尺度上绘制功率估计:
1 | spectrum.plot_topomap() |
或者,你可以使用plot_topo
将每个传感器的PSD绘制在自己的位置,这些位置在空间上与传感器在空间中的位置相对应:
这个plot也是交互式的。将鼠标悬停在每个“缩略图”上,将在绘图窗口的左下角显示通道名称,单击缩略图将创建第二幅图,显示所选通道的谱密度的大图,就好像调用plot时选择该通道。
默认情况下,plot_topo将只显示MEG通道,,如果只找到EEG通道,则将其绘制为:
1 | spectrum.pick("eeg").plot_topo() |
在添加Spectrum
类之前,可以通过以下方式绘制上述图试试:
1 | raw.plot_psd(average=True) |
Raw没有plot_topomap
方法。raw对象的plot_psd()
和plot_psd_topo()
方法仍然可以用于支持遗留的分析脚本,但新代码应该使用Spectrum
对象API。
从raw对象绘制传感器位置
raw对象中的通道位置可以使用plot_sensors
方法轻松绘制。这里给出了一个简单的例子。请注意raw.info['bads']
中的通道被绘制为红色。
1 | raw.plot_sensors(ch_type="eeg") |
从raw对象绘制projectors
如mne.io.read_raw_fif
的输出所示。示例raw中包含了projectors投影仪(表示信号中的环境噪声,因此可以在预处理过程中“投影出来”)。可以使用plot_projs_topomap
方法将这些投影仪可视化。默认情况下,它将为每个投影仪存在的通道类型显示一个图形,每个图形将有一个子图。该文件中的三个投影仪仅为磁强计计算,因此生成了一幅包含三个子图的图像。
1 | raw.plot_projs_topomap(colorbar=True) |