You can do something like this:
# %%
import pandas as pd
import mne
from mne.preprocessing import ICA
sample_data_folder = mne.datasets.sample.data_path()
sample_data_raw_file = (
sample_data_folder / "MEG" / "sample" / "sample_audvis_filt-0-40_raw.fif"
)
raw = (
mne.io.read_raw_fif(sample_data_raw_file)
.crop(tmax=60.0)
.pick(picks=["mag", "eeg", "stim", "eog"])
)
raw.load_data()
filt_raw = raw.copy().filter(l_freq=1.0, h_freq=None)
ica = ICA(random_state=97)
ica.fit(filt_raw)
# %%
ch_types = ("mag", "eeg")
var_explained = pd.DataFrame(
columns=ch_types, index=pd.RangeIndex(ica.n_components_, name="Component")
)
for component_idx in range(ica.n_components_):
ratios = ica.get_explained_variance_ratio(filt_raw, components=component_idx)
for ch_type, ratio in ratios.items():
var_explained.loc[component_idx, ch_type] = ratio
var_explained
Produces this output:
Best wishes,
Richard