Skip to content

FIX: pass cmap name string not tuple to interactive topomap slider kwargs - #14039

Merged
larsoner merged 4 commits into
mne-tools:mainfrom
PragnyaKhandelwal:fix-interactive-topomap-cmap-14038
Jul 9, 2026
Merged

FIX: pass cmap name string not tuple to interactive topomap slider kwargs#14039
larsoner merged 4 commits into
mne-tools:mainfrom
PragnyaKhandelwal:fix-interactive-topomap-cmap-14038

Conversation

@PragnyaKhandelwal

@PragnyaKhandelwal PragnyaKhandelwal commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Reference issue (if any)

Fixes #14038.

What does this implement/fix?

plot_evoked_topomap(times='interactive') crashed with a KeyError whenever the time slider was moved.

_setup_cmap() returns a (name, draggable) tuple, and group_cmaps stores these tuples. In the interactive slider setup, the full tuple was being passed as the cmap kwarg instead of just the name string, so matplotlib's colormap registry couldn't find the key and raised a KeyError.

Fix: cmap=group_cmaps[0]cmap=group_cmaps[0][0] on the one line that builds the slider's kwargs dict.

A regression test is added that triggers the slider callback directly and asserts the topomap axes has content after the move.

Additional information

@PragnyaKhandelwal
PragnyaKhandelwal marked this pull request as ready for review July 9, 2026 17:51
@PragnyaKhandelwal

PragnyaKhandelwal commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

@larsoner — this fixes the KeyError from #14038. The root cause was _setup_cmap() returning a (name, draggable) tuple, but the interactive slider's kwargs were being set to the full tuple instead of just the name string. One-line fix plus a regression test. Happy to hear if you'd like anything changed.

Comment thread doc/changes/dev/14039.bugfix.rst Outdated
@@ -0,0 +1 @@
Fix :func:`~mne.viz.plot_evoked_topomap` with ``times='interactive'`` crashing with a :class:`KeyError` when moving the time slider, by passing the colormap name string rather than the full ``(name, draggable)`` tuple to the slider update callback (:gh:`14039`). By :newcontrib:`Pragnya Khandelwal`.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a within-release bugfix so we usually don't bother with release notes for those (no end user on 1.12.1 would ever see it). So let's remove this and I'll add no-changelog-entry-needed

Comment thread mne/viz/tests/test_topomap.py Outdated
slider_ax.slider.set_val(evoked.times[len(evoked.times) // 2])
# Verify the topomap was redrawn (not blank) — would fail with double-scaling
assert len(fig.axes[0].images) > 0
plt.close("all")

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No need for this we have an autouse fixture that closes windows

Suggested change
plt.close("all")

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the suggestion @larsoner!

@larsoner larsoner left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the quick fix, marking for merge-when-green!

@larsoner
larsoner enabled auto-merge (squash) July 9, 2026 18:34
@larsoner
larsoner merged commit 31a7326 into mne-tools:main Jul 9, 2026
32 checks passed
@PragnyaKhandelwal
PragnyaKhandelwal deleted the fix-interactive-topomap-cmap-14038 branch July 10, 2026 13:41
larsoner added a commit to larsoner/mne-python that referenced this pull request Jul 14, 2026
* upstream/main:
  Make scrollbar handlers draggable (mne-tools#14040)
  [pre-commit.ci] pre-commit autoupdate (mne-tools#14052)
  Warn when Epochs events fall outside the raw data range (mne-tools#12989) (mne-tools#14004)
  Ensure epochs being concatenated have compatible event ids (mne-tools#14051)
  Widen main content area (mne-tools#14015)
  MAINT: remove dead gain/bits/value_range fields from _read_header in … (mne-tools#14047)
  ENH: replace `_get_blocks` binary reader with mffpy Reader API (mne-tools#14043)
  MAINT: Update dependency specifiers (mne-tools#14048)
  [dependabot]: Bump the actions group with 2 updates (mne-tools#14049)
  Simplify doc building with more refleak (mne-tools#14045)
  ENH: add overlay Brain GUI (mne-tools#14031)
  ENH: support multiple simultaneous overlays in Brain.add_data (mne-tools#13995)
  Add option to show a zero line in browser (mne-tools#14018)
  FIX: pass cmap name string not tuple to interactive topomap slider kwargs (mne-tools#14039)
  Doc/add ai policy pointer (mne-tools#14037)
  Allow subclasses of FigureClass to be passed to plot_raw/plot_epochs (mne-tools#13979)
  MAINT: Replace manual PNS binary block reader in `_read_segment_file` with `mffpy` (mne-tools#14030)
larsoner added a commit to sharifhsn/mne-python that referenced this pull request Jul 14, 2026
* upstream/main: (206 commits)
  Improve type checks (mne-tools#14036)
  Make scrollbar handlers draggable (mne-tools#14040)
  [pre-commit.ci] pre-commit autoupdate (mne-tools#14052)
  Warn when Epochs events fall outside the raw data range (mne-tools#12989) (mne-tools#14004)
  Ensure epochs being concatenated have compatible event ids (mne-tools#14051)
  Widen main content area (mne-tools#14015)
  MAINT: remove dead gain/bits/value_range fields from _read_header in … (mne-tools#14047)
  ENH: replace `_get_blocks` binary reader with mffpy Reader API (mne-tools#14043)
  MAINT: Update dependency specifiers (mne-tools#14048)
  [dependabot]: Bump the actions group with 2 updates (mne-tools#14049)
  Simplify doc building with more refleak (mne-tools#14045)
  ENH: add overlay Brain GUI (mne-tools#14031)
  ENH: support multiple simultaneous overlays in Brain.add_data (mne-tools#13995)
  Add option to show a zero line in browser (mne-tools#14018)
  FIX: pass cmap name string not tuple to interactive topomap slider kwargs (mne-tools#14039)
  Doc/add ai policy pointer (mne-tools#14037)
  Allow subclasses of FigureClass to be passed to plot_raw/plot_epochs (mne-tools#13979)
  MAINT: Replace manual PNS binary block reader in `_read_segment_file` with `mffpy` (mne-tools#14030)
  Fix transition bandwidth reported in 'filter too short' error (mne-tools#11406) (mne-tools#14005)
  ENH: Show the current time as a vertical line in plot_evoked_topo (mne-tools#14032)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

BUG: Evoked Topomap broken interactivity

2 participants