diff --git a/doc/changes/dev/13756.newfeature.rst b/doc/changes/dev/13756.newfeature.rst new file mode 100644 index 00000000000..434e79908df --- /dev/null +++ b/doc/changes/dev/13756.newfeature.rst @@ -0,0 +1 @@ +Added ``cmap`` parameter to ``Evoked.animate_topomap`` to allow user-specified colormaps., by :newcontrib:`Hansuja Budhiraja`. \ No newline at end of file diff --git a/mne/evoked.py b/mne/evoked.py index b4a4bc853e7..2f953ff24a0 100644 --- a/mne/evoked.py +++ b/mne/evoked.py @@ -797,12 +797,13 @@ def animate_topomap( ch_type=None, times=None, frame_rate=None, + *, + cmap=None, butterfly=False, blit=True, show=True, time_unit="s", sphere=None, - *, image_interp=_INTERPOLATION_DEFAULT, extrapolate=_EXTRAPOLATE_DEFAULT, vmin=None, @@ -829,6 +830,11 @@ def animate_topomap( frame_rate : int | None Frame rate for the animation in Hz. If None, frame rate = sfreq / 10. Defaults to None. + cmap : matplotlib colormap | None + Colormap to use. If None, 'Reds' is used for all positive data, + otherwise defaults to 'RdBu_r'. + + .. versionadded:: 1.12.0 butterfly : bool Whether to plot the data as butterfly plot under the topomap. Defaults to False. @@ -880,6 +886,7 @@ def animate_topomap( vmin=vmin, vmax=vmax, verbose=verbose, + cmap=cmap, ) def as_type(self, ch_type="grad", mode="fast"): diff --git a/mne/viz/tests/test_topomap.py b/mne/viz/tests/test_topomap.py index 64a13b46006..62c314f3603 100644 --- a/mne/viz/tests/test_topomap.py +++ b/mne/viz/tests/test_topomap.py @@ -175,12 +175,18 @@ def test_plot_topomap_animation(capsys): evoked = read_evokeds(evoked_fname, "Left Auditory", baseline=(None, 0)) # Test animation - _, anim = evoked.animate_topomap( - ch_type="grad", times=[0, 0.1], butterfly=False, time_unit="s", verbose="debug" + fig, anim = evoked.animate_topomap( + ch_type="grad", + times=[0, 0.1], + cmap="viridis", + butterfly=False, + time_unit="s", + verbose="debug", ) anim._func(1) # _animate has to be tested separately on 'Agg' backend. out, _ = capsys.readouterr() assert "extrapolation mode local to 0" in out + assert fig.axes[0].images[0].get_cmap().name == "viridis" def test_plot_topomap_animation_csd(capsys): diff --git a/mne/viz/topomap.py b/mne/viz/topomap.py index 1bd585bb4f1..8575e05971a 100644 --- a/mne/viz/topomap.py +++ b/mne/viz/topomap.py @@ -3149,6 +3149,7 @@ def _init_anim( merge_channels, sphere, ch_type, + cmap, image_interp, extrapolate, verbose, @@ -3174,7 +3175,8 @@ def _init_anim( data, _ = _merge_ch_data(data, "grad", []) norm = True if np.min(data) > 0 else False - cmap = "Reds" if norm else "RdBu_r" + if cmap is None: + cmap = "Reds" if norm else "RdBu_r" vmin, vmax = _setup_vmin_vmax(data, vmin, vmax, norm) @@ -3324,6 +3326,7 @@ def _key_press(event, params): def _topomap_animation( evoked, ch_type, + cmap, times, frame_rate, butterfly, @@ -3407,6 +3410,7 @@ def _topomap_animation( merge_channels=merge_channels, sphere=sphere, ch_type=ch_type, + cmap=cmap, image_interp=image_interp, extrapolate=extrapolate, verbose=verbose,