I was trying to create interactive topoplot with python MNE and got stuck. Topomap (or topoplot) is drawn, but it doesn't update. Do you have any idea how to make it interactive?
data:
import mne
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import Slider, Button
%matplotlib widget
biosemi_montage = mne.channels.make_standard_montage('biosemi64')
n_channels = len(biosemi_montage.ch_names)
fake_info = mne.create_info(ch_names=biosemi_montage.ch_names, sfreq=250.,
ch_types='eeg')
rng = np.random.RandomState(0)
data = rng.normal(size=(n_channels, 100)) * 1e-6
fake_evoked = mne.EvokedArray(data, fake_info)
fake_evoked.set_montage(biosemi_montage)
topoplot:
fig, ax = plt.subplots()
voltage = fake_evoked.data
timing = [round(i, ndigits=3) for i in list(np.linspace(0, 1, 100))]
init_time = 0
mne.viz.plot_topomap(voltage[:, timing.index(init_time)], fake_evoked.info, axes=ax,
#image_interp='cubic',
show=False)
ax.set_title('MNE', fontweight='bold')
axtime = fig.add_axes([0.25, 0.01, 0.65, 0.04])
time_slider = Slider(
ax=axtime,
label='Time [ms]',
valmin=0, valmax=1, valstep=100,
valinit=init_time,
)
# The function to be called anytime a slider's value changes
def update(val):
init_time = round(time_slider.val, ndigits=3)
mne.viz.plot_topomap(voltage[:, timing.index(init_time)], fake_evoked.info, axes=ax,
show=False)
fig.canvas.draw_idle()
# register the update function with each slider
time_slider.on_changed(update)
plt.show()