Hello everyone,

I am doing a time-frequency analysis using tfr.morlet and I am setting average=False. As output, I obtain an EpochsTFR object with 4 dimensions (epochs, channels, freqs and samples). Does anyone know how can I plot this object?

Hello everyone,

I am doing a time-frequency analysis using tfr.morlet and I am setting average=False. As output, I obtain an EpochsTFR object with 4 dimensions (epochs, channels, freqs and samples). Does anyone know how can I plot this object?

Hello @Res and welcome to the forum!

There is a list of examples demonstrating how to use and plot `EpochsTFR`

, maybe some of them have what youâ€™re looking for?

Good luck,

Richard

1 Like

Thank you! I have already tried them but in these examples they use trf.epochs to perform some other statistics and do not plot directly this output. I tried with tfr.epochs.plot() and I get an error that plot is not supported, then I tried selecting only one channel typing epochs_pow= trf.epochs.data[:, 1, :, :] and plt.plot(epochs_pow) but I get as error: â€śx and y can be no greater than 2-D, but have shapes (288,) and (500, 8, 3000)â€ť. Basically after I apply trf.morlet on my epochs, I have an output with four dimensions: 500, 64 (channels), 8, 3000 and I would like to plot a spectrogram of each channel, but I canâ€™t see how to do it!

Have a look at this section and the following sections of the time-frequency tutorial, which â€“ I think â€“ describes exactly what you want:

https://mne.tools/stable/auto_tutorials/time-freq/20_sensors_time_frequency.html#inspect-power

Here they are using Average=True (while Iâ€™m doing Average=False) so their output has less dimension than mine and they can just plot each channel easily!

Not for power and ITC analysis with Morlet wavelets. See Frequency and time-frequency sensor analysis â€” MNE 0.23.0 documentation again

Are you referring to this line: **power, itc= tfr_morlet(epochs, freqs=freqs, n_cycles=ncycles, use_fft=True, return_itc=True, decim=3, n_jobs=1)** ? Here average is True by default! (from here: mne.time_frequency.tfr_morlet â€” MNE 0.23.0 documentation)

You are right. Ok I have an idea for a workaround.

- You generate your TFR epochs with
`return_itc=False, average=False`

. This returns an`EpochsTFR`

object, for which there are not built-in plotting functions. - You can index / subset an
`EpochsTFR`

object just like`Epochs`

. For example, to get the first`EpochsTFR`

, you can do`power[1]`

. - Lastly, if you call the method
`average()`

, we will return an`AverageTFR`

, which has the various plotting functions mentioned in the tutorial.

Together, what I propose to do is something like the following:

```
power = tfr_morlet(epochs, freqs=freqs, n_cycles=n_cycles, use_fft=True,
return_itc=False, decim=3, n_jobs=1, average=False)
epochs_idx = 50
ch_name = 'MEG 1142'
(power[epochs_idx]
.average()
.plot(
picks=ch_name,
baseline=(-0.5, 0),
mode='logratio',
title=f'TFR epoch {epochs_idx}, channel {ch_name}'
)
)
```

which produces something like:

1 Like

Thank you so much, really appreciated it!!