overlapping channels in plot_psd_topo

when I execute the following statement:

raw.plot_psd_topo()

ValueError: The following electrodes have overlapping positions, which causes problems during visualization:
FP1, VEOG, FPz, FP2

So what’s the fundamental problem?

As the error message says, the fundamental problem is that 4 of your channels have overlapping positions. This usually happens when an incomplete or incorrect montage is applied, or the correct montage is applied incorrectly. In your original post (which this was split off from), you uploaded this sensor plot:

Notice that in the center of the head (where Cz should be) there are several overlapping sensors. One of them ends with “G” and is probably “VEOG”, which should not get plotted at all because it ought to be a “EOG” channel not an “EEG” channel. You can fix that with raw.set_channel_types.

Also notice that FP1, FPz, and FP2 are not present near the nose (where they should be). This means that there are errors in your montage (those three channels have incorrect locations). The answer is the same as was given in the prior post: use match_case=False when you set the montage; the channels are stored in your file as “FP1”, “FPz”, “FP2” but in the standard montage they are “Fp1”, “Fpz”, “Fp2”. Capitalization matters!

In [1]: import mne
In [2]: raw = mne.io.read_raw_brainvision('8-3.vhdr')
Extracting parameters from 8-3.vhdr...
<ipython-input-2-a59bfeda972f>:1: RuntimeWarning: Online software filter detected. Using software filter settings and ignoring hardware values
  raw = mne.io.read_raw_brainvision('8-3.vhdr')
<ipython-input-2-a59bfeda972f>:1: RuntimeWarning: Channels contain different highpass filters. Lowest (weakest) filter setting (0.00 Hz) will be stored.
  raw = mne.io.read_raw_brainvision('8-3.vhdr')
<ipython-input-2-a59bfeda972f>:1: RuntimeWarning: Channels contain different lowpass filters. Highest (weakest) filter setting (500.00 Hz, Nyquist limit) will be stored.
  raw = mne.io.read_raw_brainvision('8-3.vhdr')
Setting channel info structure...
In [3]: raw.set_channel_types(dict(VEOG='eog'))
Out[3]: <RawBrainVision | 8-3.eeg, 64 x 1369420 (1369.4 s), ~68 kB, data not loaded>
In [4]: raw.set_montage('standard_1020', match_case=False)
Out[4]: <RawBrainVision | 8-3.eeg, 64 x 1369420 (1369.4 s), ~93 kB, data not loaded>
In [5]: raw.plot_sensors(show_names=True)
Out[5]: <Figure size 640x640 with 1 Axes>
In [6]: raw.plot_psd_topo()
Effective window size : 2.048 (s)
Out[6]: <Figure size 640x480 with 1 Axes>

The sensor plot now looks correct:

…and now the PSD topoplot will work.

Thank you. How can I ever thank you