Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unexpected behavior: plot_topomap channel labels affected by mask parameter #12906

Open
scholzri opened this issue Oct 21, 2024 · 1 comment
Open
Labels

Comments

@scholzri
Copy link
Contributor

scholzri commented Oct 21, 2024

Description of the problem

There appears to be a limitation with the mne.viz.plot_topomap function. When using the names parameter to display channel labels, the mask parameter affects which labels are shown, even in cases where it shouldn't. This behavior is inconsistent with the expected functionality of the mask parameter.

Steps to reproduce

  1. Install MNE-Python and its dependencies.
  2. Run the following code:
import mne
import numpy as np

# Create a sample raw object
sample_data_folder = mne.datasets.sample.data_path()
sample_data_raw_file = (sample_data_folder / 'MEG' / 'sample' /
                        'sample_audvis_raw.fif')
raw = mne.io.read_raw_fif(sample_data_raw_file, preload=True)

# Select only EEG channels
raw.pick_types(meg=False, eeg=True)

# Create dummy data for visualization
data = np.random.rand(len(raw.ch_names))

# Case 1: No mask (all labels shown)
mne.viz.plot_topomap(data, raw.info, names=raw.ch_names)

# Case 2: Mask with all False (should be equivalent to mask=None)
mask = np.zeros(len(raw.ch_names), dtype=bool)
mne.viz.plot_topomap(data, raw.info, names=raw.ch_names, mask=mask)

# Case 3: Mask with some True values
mask[0] = True  # Set "EEG 001" to True
mne.viz.plot_topomap(data, raw.info, names=raw.ch_names, mask=mask)

Link to data

No response

Expected results

  1. Case 1: All channel labels should be displayed.
  2. Case 2: All channel labels should be displayed (equivalent to Case 1).
  3. Case 3: All channel labels should be displayed, with "EEG 001" highlighted or emphasized due to the True value in the mask.

Actual results

  1. Case 1: All channel labels are displayed correctly.
  2. Case 2: No channel labels are displayed, despite the mask being all False (which according to the documentation is equivalent to the default None)
  3. Case 3: Only the "EEG 001" label is displayed, corresponding to the True value in the mask. The other labels are missing.

Additional information

Platform             Linux-6.11.3-arch1-1-x86_64-with-glibc2.40
Python               3.12.7 (main, Oct  1 2024, 11:15:50) [GCC 14.2.1 20240910]
Executable           /home/richard/Projekte/mne/.venv3/bin/python
CPU                   (12 cores)
Memory               15.0 GB

Core
├☑ mne               1.8.0 (latest release)
├☑ numpy             2.1.2 (OpenBLAS 0.3.27 with 12 threads)
├☑ scipy             1.14.1
└☑ matplotlib        3.9.2 (backend=qtagg)

Numerical (optional)
├☑ sklearn           1.5.2
├☑ nibabel           5.3.0
├☑ pandas            2.2.3
├☑ h5io              0.2.4
├☑ h5py              3.12.1
└☐ unavailable       numba, nilearn, dipy, openmeeg, cupy

Visualization (optional)
├☑ pyvista           0.44.1 (OpenGL 4.6 (Core Profile) Mesa 24.2.5-arch1.1 via AMD Radeon Graphics (radeonsi, renoir, LLVM 18.1.8, DRM 3.59, 6.11.3-arch1-1))
├☑ pyvistaqt         0.11.1
├☑ vtk               9.3.1
├☑ qtpy              2.4.1 (PySide6=6.7.2)
├☑ pyqtgraph         0.13.7
├☑ mne-qt-browser    0.6.3
└☐ unavailable       ipympl, ipywidgets, trame_client, trame_server, trame_vtk, trame_vuetify

Ecosystem (optional)
├☑ mne-bids          0.15.0
├☑ mne-bids-pipeline 1.9.0
├☑ eeglabio          0.0.2-4
├☑ edfio             0.4.4
├☑ pybv              0.7.5
└☐ unavailable       mne-nirs, mne-features, mne-connectivity, mne-icalabel, neo, mffpy
@scholzri scholzri added the BUG label Oct 21, 2024
@larsoner
Copy link
Member

Hah yes this seems like an internal confusion with how mask is interpreted. We should do with the labels whatever we do with the sensors themselves (and hopefully this is what we say will be done in the docstring). PR welcome to fix it!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants