def plot_fg(fg, save_fig=False, file_name='FOOOF_group_fit', file_path=None): """Plots a figure with subplots covering several components for FOOOFGroup results. Parameters ---------- fg : FOOOFGroup() object FOOOFGroup object, containing results from fitting a group of power spectra. save_fig : boolean, optional Whether to save out a copy of the plot. default : False file_name : str, optional Name to give the saved out file. file_path : str, optional Path to directory in which to save. If not provided, saves to current directory. """ if not fg.group_results: raise RuntimeError('No data available to plot - can not proceed.') fig = plt.figure(figsize=(14, 10)) gs = gridspec.GridSpec(2, 2, wspace=0.35, hspace=0.25, height_ratios=[1, 1.2]) # Aperiodic parameters plot ax0 = plt.subplot(gs[0, 0]) plot_fg_bg(fg, ax0) # Goodness of fit plot ax1 = plt.subplot(gs[0, 1]) plot_fg_gf(fg, ax1) # Center frequencies plot ax2 = plt.subplot(gs[1, :]) plot_fg_peak_cens(fg, ax2) if save_fig: plt.savefig(fpath(file_path, fname(file_name, 'png')))
def plot_fm(fm, plt_log=False, save_fig=False, file_name='FOOOF_fit', file_path=None, ax=None): """Plot the power spectrum and model fit results from a FOOOF object. Parameters ---------- fm : FOOOF() object FOOOF object, containing a power spectrum and (optionally) results from fitting. plt_log : boolean, optional, default: False Whether or not to plot the frequency axis in log space. save_fig : boolean, optional, default: False Whether to save out a copy of the plot. file_name : str, optional Name to give the saved out file. file_path : str, optional Path to directory in which to save. If None, saves to current directory. ax : matplotlib.Axes, optional Figure axes upon which to plot. """ if not np.all(fm.freqs): raise RuntimeError('No data available to plot - can not proceed.') ax = check_ax(ax) # Log Plot Settings - note that power values in FOOOF objects are already logged log_freqs = plt_log log_powers = False # Create the plot, adding data as is available if np.any(fm.power_spectrum): plot_spectrum(fm.freqs, fm.power_spectrum, log_freqs, log_powers, ax, color='k', linewidth=1.25, label='Original Spectrum') if np.any(fm.fooofed_spectrum_): plot_spectrum(fm.freqs, fm.fooofed_spectrum_, log_freqs, log_powers, ax, color='r', linewidth=3.0, alpha=0.5, label='Full Model Fit') plot_spectrum(fm.freqs, fm._ap_fit, log_freqs, log_powers, ax, color='b', linestyle='dashed', linewidth=3.0, alpha=0.5, label='Aperiodic Fit') # Save out figure, if requested if save_fig: plt.savefig(fpath(file_path, fname(file_name, 'png')))
def plot_fm(fm, plot_peaks=None, plot_aperiodic=True, plt_log=False, add_legend=True, save_fig=False, file_name=None, file_path=None, ax=None, plot_style=style_spectrum_plot, data_kwargs=None, model_kwargs=None, aperiodic_kwargs=None, peak_kwargs=None): """Plot the power spectrum and model fit results from a FOOOF object. Parameters ---------- fm : FOOOF Object containing a power spectrum and (optionally) results from fitting. plot_peaks : None or {'shade', 'dot', 'outline', 'line'}, optional What kind of approach to take to plot peaks. If None, peaks are not specifically plotted. Can also be a combination of approaches, separated by '-', for example: 'shade-line'. plot_aperiodic : boolean, optional, default: True Whether to plot the aperiodic component of the model fit. plt_log : boolean, optional, default: False Whether to plot the frequency values in log10 spacing. add_legend : boolean, optional, default: False Whether to add a legend describing the plot components. save_fig : bool, optional, default: False Whether to save out a copy of the plot. file_name : str, optional Name to give the saved out file. file_path : str, optional Path to directory to save to. If None, saves to current directory. ax : matplotlib.Axes, optional Figure axes upon which to plot. plot_style : callable, optional, default: style_spectrum_plot A function to call to apply styling & aesthetics to the plot. data_kwargs, model_kwargs, aperiodic_kwargs, peak_kwargs : None or dict, optional Keyword arguments to pass into the plot call for each plot element. Notes ----- Since FOOOF objects store power values in log spacing, the y-axis (power) is plotted in log spacing by default. """ ax = check_ax(ax, PLT_FIGSIZES['spectral']) # Log settings - note that power values in FOOOF objects are already logged log_freqs = plt_log log_powers = False # Plot the data, if available if fm.has_data: data_kwargs = check_plot_kwargs(data_kwargs, \ {'color' : PLT_COLORS['data'], 'linewidth' : 2.0, 'label' : 'Original Spectrum' if add_legend else None}) plot_spectrum(fm.freqs, fm.power_spectrum, log_freqs, log_powers, ax=ax, plot_style=None, **data_kwargs) # Add the full model fit, and components (if requested) if fm.has_model: model_kwargs = check_plot_kwargs(model_kwargs, \ {'color' : PLT_COLORS['model'], 'linewidth' : 3.0, 'alpha' : 0.5, 'label' : 'Full Model Fit' if add_legend else None}) plot_spectrum(fm.freqs, fm.fooofed_spectrum_, log_freqs, log_powers, ax=ax, plot_style=None, **model_kwargs) # Plot the aperiodic component of the model fit if plot_aperiodic: aperiodic_kwargs = check_plot_kwargs(aperiodic_kwargs, \ {'color' : PLT_COLORS['aperiodic'], 'linewidth' : 3.0, 'alpha' : 0.5, 'linestyle' : 'dashed', 'label' : 'Aperiodic Fit' if add_legend else None}) plot_spectrum(fm.freqs, fm._ap_fit, log_freqs, log_powers, ax=ax, plot_style=None, **aperiodic_kwargs) # Plot the periodic components of the model fit if plot_peaks: _add_peaks(fm, plot_peaks, plt_log, ax=ax, peak_kwargs=peak_kwargs) # Apply style to plot check_n_style(plot_style, ax, log_freqs, True) # Save out figure, if requested if save_fig: if not file_name: raise ValueError( "Input 'file_name' is required to save out the plot.") plt.savefig(fpath(file_path, fname(file_name, 'png')))