-
Notifications
You must be signed in to change notification settings - Fork 112
Expand file tree
/
Copy pathfg.py
More file actions
109 lines (84 loc) · 3.26 KB
/
fg.py
File metadata and controls
109 lines (84 loc) · 3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
"""Plots for the FOOOFGroup object.
Notes
-----
This file contains plotting functions that take as input a FOOOFGroup object.
"""
from fooof.core.io import fname
from fooof.core.errors import NoModelError
from fooof.core.modutils import safe_import, check_dependency
from fooof.plts.settings import PLT_FIGSIZES
from fooof.plts.templates import plot_scatter_1, plot_scatter_2, plot_hist
plt = safe_import('.pyplot', 'matplotlib')
gridspec = safe_import('.gridspec', 'matplotlib')
###################################################################################################
###################################################################################################
@check_dependency(plt, 'matplotlib')
def plot_fg(fg, file_name=None):
"""Plot a figure with subplots visualizing the parameters from a FOOOFGroup object.
Parameters
----------
fg : FOOOFGroup
Object containing results from fitting a group of power spectra.
file_name : str, optional, default: None
Name with format to save as, including absolute or relative path.
Raises
------
NoModelError
If the FOOOF object does not have model fit data available to plot.
"""
if not fg.has_model:
raise NoModelError("No model fit results are available, can not proceed.")
fig = plt.figure(figsize=PLT_FIGSIZES['group'])
gs = gridspec.GridSpec(2, 2, wspace=0.4, hspace=0.25, height_ratios=[1, 1.2])
# Aperiodic parameters plot
ax0 = plt.subplot(gs[0, 0])
plot_fg_ap(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 file_name is not None:
plt.savefig(fname(file_name, 'png'))
@check_dependency(plt, 'matplotlib')
def plot_fg_ap(fg, ax=None):
"""Plot aperiodic fit parameters, in a scatter plot.
Parameters
----------
fg : FOOOFGroup
Object to plot data from.
ax : matplotlib.Axes, optional
Figure axes upon which to plot.
"""
if fg.aperiodic_mode == 'knee':
plot_scatter_2(fg.get_params('aperiodic_params', 'exponent'), 'Knee',
fg.get_params('aperiodic_params', 'knee'), 'Exponent',
'Aperiodic Fit', ax=ax)
else:
plot_scatter_1(fg.get_params('aperiodic_params', 'exponent'), 'Exponent',
'Aperiodic Fit', ax=ax)
@check_dependency(plt, 'matplotlib')
def plot_fg_gf(fg, ax=None):
"""Plot goodness of fit results, in a scatter plot.
Parameters
----------
fg : FOOOFGroup
Object to plot data from.
ax : matplotlib.Axes, optional
Figure axes upon which to plot.
"""
plot_scatter_2(fg.get_params('error'), 'Error',
fg.get_params('r_squared'), 'R^2', 'Goodness of Fit', ax=ax)
@check_dependency(plt, 'matplotlib')
def plot_fg_peak_cens(fg, ax=None):
"""Plot peak center frequencies, in a histogram.
Parameters
----------
fg : FOOOFGroup
Object to plot data from.
ax : matplotlib.Axes, optional
Figure axes upon which to plot.
"""
plot_hist(fg.get_params('peak_params', 0)[:, 0], 'Center Frequency',
'Peaks - Center Frequencies', x_lims=fg.freq_range, ax=ax)