In [ ]:
%matplotlib inline
In [ ]:
# sphinx_gallery_thumbnail_number = 2
import os.path as op
import matplotlib.pyplot as plt
import mne
Here for convenience we read the evoked dataset from a file.
In [ ]:
data_path = mne.datasets.sample.data_path()
fname = op.join(data_path, 'MEG', 'sample', 'sample_audvis-ave.fif')
evokeds = mne.read_evokeds(fname, baseline=(None, 0), proj=True)
print(evokeds)
Notice that the reader function returned a list of evoked instances. This is
because you can store multiple categories into a single file. Here we have
categories of
['Left Auditory', 'Right Auditory', 'Left Visual', 'Right Visual']
.
We can also use condition
parameter to read in only one category.
In [ ]:
evoked = mne.read_evokeds(fname, condition='Left Auditory')
evoked.apply_baseline((None, 0)).apply_proj()
print(evoked)
If you're gone through the tutorials of raw and epochs datasets, you're
probably already familiar with the :class:Info <mne.Info>
attribute.
There is nothing new or special with the evoked.info
. All the relevant
info is still there.
In [ ]:
print(evoked.info)
print(evoked.times)
The evoked data structure also contains some new attributes easily accessible:
In [ ]:
print(evoked.nave) # Number of averaged epochs.
print(evoked.first) # First time sample.
print(evoked.last) # Last time sample.
print(evoked.comment) # Comment on dataset. Usually the condition.
print(evoked.kind) # Type of data, either average or standard_error.
The data is also easily accessible. Since the evoked data arrays are usually much smaller than raw or epochs datasets, they are preloaded into the memory when the evoked object is constructed. You can access the data as a numpy array.
In [ ]:
data = evoked.data
print(data.shape)
The data is arranged in an array of shape (n_channels, n_times)
. Notice
that unlike epochs, evoked object does not support indexing. This means that
to access the data of a specific channel you must use the data array
directly.
In [ ]:
print('Data from channel {0}:'.format(evoked.ch_names[10]))
print(data[10])
In the same vein, we can quickly extract (and, e.g., plot) the GFP as the standard deviation across channels, here shown just for EEG.
In [ ]:
gfp = evoked.copy().pick_types(eeg=True, meg=False).data.std(axis=0)
fig, ax = plt.subplots(1)
ax.plot(evoked.times, gfp / 1e6) # scale to uV
ax.set(xlabel='Time (sec)', ylabel='GFP (uV)')
fig.tight_layout()
If you want to import evoked data from some other system and you have it in a
numpy array you can use :class:mne.EvokedArray
for that. All you need is
the data and some info about the evoked data. For more information, see
tut_creating_data_structures
.
In [ ]:
evoked = mne.EvokedArray(data, evoked.info, tmin=evoked.times[0])
evoked.plot(time_unit='s')
To write an evoked dataset to a file, use the :meth:mne.Evoked.save
method.
To save multiple categories to a single file, see :func:mne.write_evokeds
.