Multitaper spectrogram plot

Below is a code sample for plotting spectrograms

from ieeg.viz.ensemble import chan_grid
from ieeg.timefreq.multitaper import spectrogram
from ieeg.timefreq.utils import crop_pad
from ieeg.navigate import channel_outlier_marker
from ieeg.viz.parula import parula_map
import numpy as np
import mne

Load Data

misc_path = mne.datasets.misc.data_path()
raw = mne.io.read_raw(misc_path / 'seeg' / 'sample_seeg_ieeg.fif')
Using default location ~/mne_data for misc...
Creating /home/docs/mne_data
Dataset misc version 0.0 out of date, latest version is 0.27
Downloading file 'mne-misc-data-0.27.tar.gz' from 'https://codeload.github.com/mne-tools/mne-misc-data/tar.gz/0.27' to '/home/docs/mne_data'.

0.00B [00:00, ?B/s]
786kB [00:00, 7.11MB/s]
1.57MB [00:00, 7.32MB/s]
4.98MB [00:00, 18.7MB/s]
7.60MB [00:00, 21.1MB/s]
9.73MB [00:00, 20.3MB/s]
11.8MB [00:00, 12.2MB/s]
13.3MB [00:01, 10.7MB/s]
14.7MB [00:01, 9.62MB/s]
16.0MB [00:01, 10.2MB/s]
17.6MB [00:01, 11.3MB/s]
18.8MB [00:01, 8.61MB/s]
20.2MB [00:01, 8.70MB/s]
21.2MB [00:02, 7.39MB/s]
23.1MB [00:02, 8.87MB/s]
24.1MB [00:02, 7.30MB/s]
25.7MB [00:02, 8.11MB/s]
26.6MB [00:02, 6.99MB/s]
27.8MB [00:02, 7.69MB/s]
28.6MB [00:03, 6.51MB/s]
29.9MB [00:03, 7.56MB/s]
30.7MB [00:03, 6.27MB/s]
32.0MB [00:03, 7.44MB/s]
32.8MB [00:03, 6.28MB/s]
34.9MB [00:03, 8.18MB/s]
35.8MB [00:04, 5.19MB/s]
38.8MB [00:04, 9.06MB/s]
41.9MB [00:04, 13.0MB/s]
45.1MB [00:04, 16.7MB/s]
48.2MB [00:04, 19.9MB/s]
51.4MB [00:04, 22.6MB/s]
54.5MB [00:04, 24.5MB/s]
57.7MB [00:04, 26.1MB/s]
60.8MB [00:05, 27.3MB/s]
63.7MB [00:05, 27.6MB/s]
66.8MB [00:05, 28.4MB/s]
69.7MB [00:05, 28.6MB/s]
72.9MB [00:05, 29.3MB/s]
76.0MB [00:05, 29.7MB/s]
79.0MB [00:06, 10.5MB/s]
81.2MB [00:06, 9.49MB/s]
83.6MB [00:06, 11.2MB/s]
86.0MB [00:06, 13.0MB/s]
88.6MB [00:06, 15.2MB/s]
90.8MB [00:07, 9.54MB/s]
93.3MB [00:07, 11.8MB/s]
95.7MB [00:07, 13.6MB/s]
98.1MB [00:07, 15.7MB/s]
100MB [00:07, 17.1MB/s]
104MB [00:07, 20.9MB/s]
106MB [00:08, 17.6MB/s]
108MB [00:08, 9.61MB/s]
110MB [00:09, 6.95MB/s]
111MB [00:09, 5.86MB/s]
115MB [00:09, 8.96MB/s]
117MB [00:09, 11.7MB/s]
120MB [00:09, 13.2MB/s]
122MB [00:09, 13.8MB/s]
124MB [00:10, 9.06MB/s]
125MB [00:10, 8.80MB/s]
126MB [00:10, 9.17MB/s]
127MB [00:10, 7.28MB/s]
128MB [00:11, 6.83MB/s]
129MB [00:11, 7.04MB/s]
131MB [00:11, 9.16MB/s]
132MB [00:11, 9.48MB/s]
133MB [00:11, 10.1MB/s]
135MB [00:11, 10.1MB/s]
136MB [00:11, 7.85MB/s]
137MB [00:11, 7.08MB/s]
137MB [00:12, 6.63MB/s]
139MB [00:12, 8.49MB/s]
140MB [00:12, 6.72MB/s]
141MB [00:12, 6.05MB/s]
141MB [00:12, 5.88MB/s]
143MB [00:12, 7.20MB/s]
144MB [00:12, 9.19MB/s]
145MB [00:13, 8.06MB/s]
146MB [00:13, 6.34MB/s]
147MB [00:13, 6.18MB/s]
148MB [00:13, 7.48MB/s]
149MB [00:13, 8.05MB/s]
150MB [00:13, 7.08MB/s]
151MB [00:14, 6.20MB/s]
152MB [00:14, 6.01MB/s]
153MB [00:14, 8.11MB/s]
154MB [00:14, 7.21MB/s]
155MB [00:14, 6.37MB/s]
156MB [00:14, 5.95MB/s]
156MB [00:14, 5.10MB/s]
158MB [00:15, 7.24MB/s]
159MB [00:15, 7.19MB/s]
160MB [00:15, 6.28MB/s]
160MB [00:15, 5.46MB/s]
161MB [00:15, 5.52MB/s]
163MB [00:15, 7.50MB/s]
163MB [00:15, 7.36MB/s]
164MB [00:16, 6.14MB/s]
165MB [00:16, 5.34MB/s]
166MB [00:16, 6.86MB/s]
168MB [00:16, 8.78MB/s]
169MB [00:16, 7.64MB/s]
170MB [00:16, 6.70MB/s]
170MB [00:17, 3.88MB/s]
174MB [00:17, 7.83MB/s]
176MB [00:17, 11.6MB/s]
180MB [00:17, 15.4MB/s]
183MB [00:17, 18.7MB/s]
186MB [00:17, 20.8MB/s]
189MB [00:17, 23.6MB/s]
192MB [00:18, 25.3MB/s]
195MB [00:18, 26.6MB/s]
198MB [00:18, 27.1MB/s]
201MB [00:18, 28.1MB/s]
204MB [00:18, 28.4MB/s]
207MB [00:18, 28.9MB/s]
210MB [00:18, 29.2MB/s]
213MB [00:18, 29.4MB/s]
216MB [00:18, 29.6MB/s]
219MB [00:18, 30.1MB/s]
222MB [00:19, 30.0MB/s]
225MB [00:19, 29.9MB/s]
229MB [00:19, 30.3MB/s]
232MB [00:19, 30.3MB/s]
235MB [00:19, 18.3MB/s]
237MB [00:19, 18.7MB/s]
239MB [00:19, 18.9MB/s]
242MB [00:20, 19.2MB/s]
244MB [00:20, 19.3MB/s]
246MB [00:20, 19.5MB/s]
248MB [00:20, 19.6MB/s]
250MB [00:20, 19.3MB/s]
252MB [00:20, 19.3MB/s]
254MB [00:20, 10.1MB/s]
256MB [00:21, 10.3MB/s]
257MB [00:21, 9.66MB/s]
258MB [00:21, 9.83MB/s]
259MB [00:21, 9.31MB/s]
260MB [00:21, 9.40MB/s]
261MB [00:21, 9.41MB/s]
262MB [00:21, 9.20MB/s]
263MB [00:21, 9.31MB/s]
265MB [00:22, 9.23MB/s]
266MB [00:22, 8.83MB/s]
267MB [00:22, 9.61MB/s]
268MB [00:22, 9.37MB/s]
269MB [00:22, 9.15MB/s]
270MB [00:22, 9.08MB/s]
271MB [00:22, 9.05MB/s]
272MB [00:22, 9.11MB/s]
273MB [00:23, 9.44MB/s]
274MB [00:23, 9.43MB/s]
275MB [00:23, 9.09MB/s]
276MB [00:23, 9.08MB/s]
277MB [00:23, 9.19MB/s]
278MB [00:23, 9.43MB/s]
279MB [00:23, 9.10MB/s]
280MB [00:23, 8.85MB/s]
281MB [00:23, 8.81MB/s]
282MB [00:24, 8.91MB/s]
283MB [00:24, 8.75MB/s]
284MB [00:24, 9.18MB/s]
285MB [00:24, 9.28MB/s]
286MB [00:24, 9.28MB/s]
287MB [00:24, 9.20MB/s]
288MB [00:24, 9.50MB/s]
289MB [00:24, 9.47MB/s]
290MB [00:24, 9.16MB/s]
291MB [00:25, 9.06MB/s]
292MB [00:25, 8.90MB/s]
0.00B [00:00, ?B/s]
0.00B [00:00, ?B/s]
Untarring contents of '/home/docs/mne_data/mne-misc-data-0.27.tar.gz' to '/home/docs/mne_data'
Attempting to create new mne-python configuration file:
/home/docs/.mne/mne-python.json
Download complete in 30s (278.8 MB)
Opening raw data file /home/docs/mne_data/MNE-misc-data/seeg/sample_seeg_ieeg.fif...
    Range : 1310640 ... 1370605 =   1311.411 ...  1371.411 secs
Ready.

Remove bad channels

# mark channel outliers as bad
raw.info['bads'] = channel_outlier_marker(raw, 3)

# Exclude bad channels
raw.drop_channels(raw.info['bads'])
raw.load_data()

# CAR (common average reference)
raw.set_eeg_reference(ref_channels="average", ch_type='seeg')
outlier round 1 channels: ['LAMY 7']
outlier round 1 channels: ['LAMY 7', 'LPHG 6']
outlier round 1 channels: ['LAMY 7', 'LPHG 6', 'LBRI 3']
outlier round 1 channels: ['LAMY 7', 'LPHG 6', 'LBRI 3', 'RAHP 3']
outlier round 2 channels: ['LAMY 7', 'LPHG 6', 'LBRI 3', 'RAHP 3', 'LENT 3']
outlier round 2 channels: ['LAMY 7', 'LPHG 6', 'LBRI 3', 'RAHP 3', 'LENT 3', 'LPIT 5']
outlier round 3 channels: ['LAMY 7', 'LPHG 6', 'LBRI 3', 'RAHP 3', 'LENT 3', 'LPIT 5', 'LENT 2']
outlier round 3 channels: ['LAMY 7', 'LPHG 6', 'LBRI 3', 'RAHP 3', 'LENT 3', 'LPIT 5', 'LENT 2', 'LENT 7']
outlier round 4 channels: ['LAMY 7', 'LPHG 6', 'LBRI 3', 'RAHP 3', 'LENT 3', 'LPIT 5', 'LENT 2', 'LENT 7', 'LPLI 8']
outlier round 5 channels: ['LAMY 7', 'LPHG 6', 'LBRI 3', 'RAHP 3', 'LENT 3', 'LPIT 5', 'LENT 2', 'LENT 7', 'LPLI 8', 'RAHP 2']
outlier round 6 channels: ['LAMY 7', 'LPHG 6', 'LBRI 3', 'RAHP 3', 'LENT 3', 'LPIT 5', 'LENT 2', 'LENT 7', 'LPLI 8', 'RAHP 2', 'LPIT 6']
Reading 0 ... 59965  =      0.000 ...    60.000 secs...
Applying average reference.
Applying a custom ('sEEG',) reference.
General
Filename(s) sample_seeg_ieeg.fif
MNE object type Raw
Measurement date 2019-10-18 at 11:09:44 UTC
Participant sub-1
Experimenter Unknown
Acquisition
Duration 00:01:01 (HH:MM:SS)
Sampling frequency 999.41 Hz
Time points 59,966
Channels
sEEG
Head & sensor digitization 122 points
Filters
Highpass 0.00 Hz
Lowpass 499.71 Hz


Calculate Spectra

freq = np.arange(10, 200., 6.)
spectra = spectrogram(raw, freq, 'Response', -1.2, 1.2, 'Fixation', -1.2, 0.2,
                      n_jobs=1, verbose=10, time_bandwidth=10, n_cycles=freq/2)
crop_pad(spectra, "0.5s")
Used Annotations descriptions: [np.str_('Fixation'), np.str_('Go Cue'), np.str_('ISI Onset'), np.str_('Response')]
Not setting metadata
8 matching events found
No baseline correction applied
0 projection items activated
Using data from preloaded Raw for 8 events and 3399 original time points ...
1 bad epochs dropped
Not setting metadata
8 matching events found
No baseline correction applied
0 projection items activated
Using data from preloaded Raw for 8 events and 2400 original time points ...
0 bad epochs dropped
NOTE: tfr_multitaper() is a legacy function. New code should use .compute_tfr(method="multitaper").
Data is self data: True
  Copying, fancy indexed picks
NOTE: tfr_multitaper() is a legacy function. New code should use .compute_tfr(method="multitaper").
Data is self data: True
  Copying, fancy indexed picks
Data type TFR
Data source Evoked
Number of averaged trials 7
Dims channel, freq, time
Estimation method multitaper
Number of channels 108
Number of timepoints 1399
Number of frequency bins 32
Frequency range 10.00 – 196.00 Hz


Plot data

chan_grid(spectra, vlim=(0.7, 1.4), cmap=parula_map)
  • , LENT 1, LENT 4, LENT 5, LENT 6, LAMY 1, LAMY 2, LAMY 3, LAMY 4, LAMY 5, LAMY 6, LPHG 1, LPHG 2, LPHG 3, LPHG 4, LPHG 5, LPHG 7, LPLI 1, LPLI 2, LPLI 3, LPLI 4, LPLI 5, LPLI 6, LPLI 7, LPLI 9, LSTG 1, LSTG 2, LSTG 3, LSTG 4, LPIT 1, LPIT 2, LPIT 3, LPIT 4, LPIT 7, LTPO 3, LTPO 4, LTPO 5, LTPO 6, LTPO 7, LTPO 8, LBRI 1, LBRI 2, LBRI 4, LBRI 5, LBRI 6, LBRI 7, LBRI 8, LACN 1, LACN 2, LACN 3, LACN 4, LACN 5, LACN 6, LACN 7, LACN 8, LOFC 1, LOFC 2, LOFC 3, LOFC 4, LOFC 5, LOFC 6
  • , LOFC 7, LOFC 8, LOFC 9, LPCN 1, LPCN 2, LPCN 3, LPCN 4, LPCN 5, LPCN 6, LPCN 7, LSMA 1, LSMA 2, LSMA 3, LSMA 4, LSMA 5, LSMA 6, LSMA 7, LSMA 8, LSMA 9, LSMA 10, LSMA 11, LSMA 12, LSMA 13, LSMA 14, LSMA 15, LSMA 16, LPM 1, LPM 2, LPM 3, LPM 5, LPM 6, LPM 7, LPM 8, LPM 9, LPM 10, RAHP 1, RAHP 4, RAHP 5, RAHP 6, RAHP 7, RAHP 8, RPHP 1, RPHP 2, RPHP 3, RPHP 4, RPHP 5, RPHP 6, RPHP 8
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied
No baseline correction applied

[<Figure size 1250.45x1875.67 with 60 Axes>, <Figure size 1250.45x1875.67 with 60 Axes>]

Total running time of the script: (1 minutes 35.919 seconds)

Estimated memory usage: 4696 MB

Related examples

Morlet Wavelet spectrogram plot

Morlet Wavelet spectrogram plot

Time Permutation Cluster Statistics

Time Permutation Cluster Statistics

Time and Frequency Permutation Cluster Statistics

Time and Frequency Permutation Cluster Statistics

Gallery generated by Sphinx-Gallery