.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_paper/04_plots.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_paper_04_plots.py: Part 5: Plot results ==================== Visualize and compare the transition frequency estimated with transfreq and with Klimesch's method .. GENERATED FROM PYTHON SOURCE LINES 8-17 .. code-block:: default from transfreq.viz import (plot_channels, plot_transfreq_klimesch, plot_transfreq_minimum, plot_transfreq) import os.path as op import pickle import numpy as np import matplotlib.pyplot as plt import os .. GENERATED FROM PYTHON SOURCE LINES 18-19 Define data paths .. GENERATED FROM PYTHON SOURCE LINES 19-36 .. code-block:: default # Local folder where to store the output of the analysis cwd = os.getcwd() data_path = os.path.join(cwd, 'transfreq_data_preproc') psds_path = op.join(data_path, 'psds') if not os.path.exists(psds_path): raise Exception( 'Cannot find data in {}. Please compute power spectra and TF first.'.format( psds_path)) with open(op.join(data_path, 'psds', 'data_rest.pkl'), 'rb') as f_rest: data_rest = pickle.load(f_rest) with open(op.join(data_path, 'psds', 'data_task.pkl'), 'rb') as f_task: data_task = pickle.load(f_task) .. GENERATED FROM PYTHON SOURCE LINES 37-38 Subjects for which klimesch's method does not provide satisfying results .. GENERATED FROM PYTHON SOURCE LINES 38-45 .. code-block:: default bad_subjs = {'01': ['003', '013', '020', '023', '027', '031', '037', '042', '047'], '02': ['002', '007', '009', '011', '013', '015', '018', '019', '020', '027']} .. GENERATED FROM PYTHON SOURCE LINES 46-47 Results for an illustrative case (subject 001, session 01) .. GENERATED FROM PYTHON SOURCE LINES 47-79 .. code-block:: default subj = '001' ses = '01' ch_locs = data_rest[subj][ses]['ch_locs'] psds_rest = data_rest[subj][ses]['psds'] psds_task = data_task[subj][ses]['psds'] freqs = data_rest[subj][ses]['freqs'] tf_klimesch = data_task[subj][ses]['tf_klimesch'] tf_minimum = data_rest[subj][ses]['tf_minimum'] # Clustering methods meths = [1, 2, 3, 4] # Plots of the channels in G_theta and G_alpha over the topomaps fig = plt.figure(constrained_layout=True, figsize=(15, 10)) subfigs = fig.subfigures(2, 2, wspace=0.07) subfigs = subfigs.ravel() for i_meth, meth in enumerate(meths): tfbox = data_rest[subj][ses]['tfbox'][meth] plot_channels(tfbox, ch_locs, subfig=subfigs[i_meth]) # Plots of transition frequencies with Klimesch's method and tranfsreq fig, ax = plt.subplots(3, 2, figsize=(10, 10)) ax = ax.ravel() plot_transfreq_klimesch(psds_rest, psds_task, freqs, tf_klimesch, ax=ax[0]) plot_transfreq_minimum(psds_rest, freqs, tf_minimum, ax=ax[1]) for i_meth, meth in enumerate(meths): tfbox = data_rest[subj][ses]['tfbox'][meth] plot_transfreq(psds_rest, freqs, tfbox, ax=ax[i_meth+2]) fig.tight_layout() .. GENERATED FROM PYTHON SOURCE LINES 80-81 Boxplots .. GENERATED FROM PYTHON SOURCE LINES 81-140 .. code-block:: default # Some properties for boxplots visualisation linewidth = 3 leg_fs = 14 lab_fs = 18 ticks_fs = 15 ylim = (-3,5) width = 0.5 boxprops = dict(linewidth=2) flierprops = dict(marker='o', markerfacecolor='k', markersize=10, markeredgecolor='none') medianprops = dict(linewidth=2, color='orange') meanpointprops = dict(marker='D', markeredgecolor='black', markerfacecolor='firebrick') whiskerprops = dict(linewidth=2) capprops = dict(linewidth=2) meths = [1, 2, 3, 4] meths_label = ['1D T', '1D MS', '2D KM', '2D aKM', 'minimum'] col = ['red', 'orange', 'olive', 'purple', 'brown', 'cyan'] total_subjs = [str(ses) for subj in data_rest.keys() for ses in data_rest[subj].keys()] total_bad_subjs = [str(subj) for ses in bad_subjs.keys() for subj in bad_subjs[ses]] err_tf = np.zeros((len(total_subjs)-len(total_bad_subjs), len(meths)+1)) i_sub = 0 for subj in data_rest.keys(): for ses in data_rest[subj].keys(): if subj not in bad_subjs[ses]: for i_meth, meth in enumerate(data_rest[subj][ses]['tfbox'].keys()): err_tf[i_sub, i_meth] = data_task[subj][ses]['tf_klimesch']-data_rest[subj][ses]['tfbox'][meth]['tf'] err_tf[i_sub, -1] = data_task[subj][ses]['tf_klimesch']-data_rest[subj][ses]['tf_minimum'] i_sub = i_sub+1 fig = plt.figure(figsize=(10,6)) ax1 = plt.subplot2grid((1, 7), (0, 0), colspan=4) ax1.boxplot(err_tf[:,:4], meanline=True, widths = width, boxprops=boxprops, flierprops=flierprops, medianprops=medianprops, meanprops=meanpointprops, whiskerprops=whiskerprops, capprops=capprops) ax1.set_ylabel(r'$\Delta_{\rm{TF}} \coloneq {\rm{TF_{Klimesch}}}-{\rm{TF}}_{transfreq}$ [Hz]', fontsize=lab_fs) ax1.set_xticks(list(np.arange(1, len(meths)+1))) ax1.set_xticklabels(meths_label[:4], rotation=45, fontsize=ticks_fs) ax1.tick_params(axis='both', which='minor', labelsize=ticks_fs) ax1.grid() ax1.set_ylim(ylim) ax2 = plt.subplot2grid((1, 7), (0, 5), colspan=2) ax2.boxplot(err_tf[:,-1], meanline=True, widths = width, boxprops=boxprops, flierprops=flierprops, medianprops=medianprops, meanprops=meanpointprops, whiskerprops=whiskerprops, capprops=capprops) ax2.set_ylabel(r'$\Delta_{\rm{TF}} \coloneq {\rm{TF_{Klimesch}}}-{\rm{TF}}_{\rm{minimum}}$ [Hz]', fontsize=lab_fs) ax2.set_xticks([1]) ax2.set_xticklabels([meths_label[-1]], rotation=45, fontsize=ticks_fs) ax2.tick_params(axis='both', which='minor', labelsize=ticks_fs) ax2.grid() ax2.set_ylim(ylim) fig.supxlabel('Method', fontsize=lab_fs) plt.tight_layout() .. GENERATED FROM PYTHON SOURCE LINES 141-142 Improvements of transfeq over Klimesch's method .. GENERATED FROM PYTHON SOURCE LINES 142-175 .. code-block:: default # subject 013, session 01 subj = '013' ses = '01' psds_rest = data_rest[subj][ses]['psds'] psds_task = data_task[subj][ses]['psds'] freqs = data_rest[subj][ses]['freqs'] tfbox = data_rest[subj][ses]['tfbox'][4] tf_klimesch = data_task[subj][ses]['tf_klimesch'] fig, ax = plt.subplots(1, 2, figsize=(8, 4)) plot_transfreq_klimesch(psds_rest, psds_task, freqs, tf_klimesch, ax=ax[0]) plot_transfreq(psds_rest, freqs, tfbox, ax=ax[1]) fig.tight_layout() # subject 037, session 01 subj = '037' ses = '01' psds_rest = data_rest[subj][ses]['psds'] psds_task = data_task[subj][ses]['psds'] freqs = data_rest[subj][ses]['freqs'] tfbox = data_rest[subj][ses]['tfbox'][4] tf_klimesch = data_task[subj][ses]['tf_klimesch'] fig, ax = plt.subplots(1, 2, figsize=(8, 4)) plot_transfreq_klimesch(psds_rest, psds_task, freqs, tf_klimesch, ax=ax[0]) plot_transfreq(psds_rest, freqs, tfbox, ax=ax[1]) ax[0].lines.remove(fig.axes[0].lines[2]) ax[0].legend() fig.tight_layout() plt.show() .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 0.000 seconds) .. _sphx_glr_download_auto_paper_04_plots.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: 04_plots.py <04_plots.py>` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: 04_plots.ipynb <04_plots.ipynb>` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_