From 23a0182ef3957f53a0f8f1a26e67f829a43d22c9 Mon Sep 17 00:00:00 2001 From: wuliaozhiji Date: Mon, 14 Mar 2022 10:44:50 -0400 Subject: [PATCH] [+] Added legend --- Distribution.png | Bin 0 -> 46244 bytes src/formant.py | 70 +++++++++++++++++++++++++++++++++-------------- 2 files changed, 50 insertions(+), 20 deletions(-) create mode 100644 Distribution.png diff --git a/Distribution.png b/Distribution.png new file mode 100644 index 0000000000000000000000000000000000000000..815273722d0b7e0019849441bf332060cb522701 GIT binary patch literal 46244 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 Ov(@Rd=9Q+G?)?QfQja76 literal 0 HcmV?d00001 diff --git a/src/formant.py b/src/formant.py index 039ef08..63561b9 100644 --- a/src/formant.py +++ b/src/formant.py @@ -16,9 +16,11 @@ import pandas as pd import parselmouth import tqdm import seaborn as sns - +from matplotlib.patches import Patch ASAB = Literal['f', 'm'] +COLOR_PINK = '#F5A9B8' +COLOR_BLUE = '#5BCEFA' def calculate_freq_info(audio: parselmouth.Sound, show_plot=False) -> numpy.ndarray: @@ -153,6 +155,27 @@ class Statistics: n: int +def calc_col_stats(col: np.ndarray) -> Statistics: + """ + Compute statistics for a data column + + :param col: Input column (tested on 1D array) + :return: Statistics + """ + q1 = np.quantile(col, 0.25) + q3 = np.quantile(col, 0.75) + return Statistics( + float(np.mean(col)), + float(np.median(col)), + float(q1), + float(q3), + float(q3 - q1), + float(np.min(col)), + float(np.max(col)), + len(col) + ) + + def calculate_statistics(arr: np.ndarray) -> FrequencyStats: """ Calculate frequency data array statistics @@ -160,20 +183,6 @@ def calculate_statistics(arr: np.ndarray) -> FrequencyStats: :param arr: n-by-4 Array from calculate_freq_info :return: Statistics """ - def calc_col_stats(col: np.ndarray) -> Statistics: - q1 = np.quantile(col, 0.25) - q3 = np.quantile(col, 0.75) - return Statistics( - float(np.mean(col)), - float(np.median(col)), - float(q1), - float(q3), - float(q3 - q1), - float(np.min(col)), - float(np.max(col)), - len(arr) - ) - result = [calc_col_stats(arr[:, i]) for i in range(0, 4)] + \ [calc_col_stats(np.divide(arr[:, i], arr[:, 0])) for i in range(1, 4)] @@ -219,7 +228,7 @@ def collect_statistics(): stats_list.append((jsonpickle.decode(stats_dir.read_text()), agab[id])) # Get AFAB and AMAB means - headers = ['Pitch (Fundamental Frequency)', 'Formant F1', 'Formant F2', 'Formant F3', 'F1 Ratio', 'F2 Ratio', 'F3 Ratio'] + headers = ['Pitch\n(Fundamental\nFrequency)', 'Formant F1', 'Formant F2', 'Formant F3', 'F1 Ratio', 'F2 Ratio', 'F3 Ratio'] f_means = np.array([[t.mean for t in [s.pitch, s.f1, s.f2, s.f3, s.f1ratio, s.f2ratio, s.f3ratio]] for s, ag in stats_list if ag == 'f']) m_means = np.array([[t.mean for t in [s.pitch, s.f1, s.f2, s.f3, s.f1ratio, s.f2ratio, s.f3ratio]] @@ -245,7 +254,19 @@ def collect_statistics(): sns.set_theme(style="ticks") fig, ax = subplots(figsize=(10, 5)) # ax.set_xscale('log') - + #print(sns.load_dataset('tips')) + print("Pitch") + print(calc_col_stats(f_means[:, 0])) + print(calc_col_stats(m_means[:, 0])) + print("F1") + print(calc_col_stats(f_means[:, 1])) + print(calc_col_stats(m_means[:, 1])) + print("F2") + print(calc_col_stats(f_means[:, 2])) + print(calc_col_stats(m_means[:, 2])) + print("F3") + print(calc_col_stats(f_means[:, 3])) + print(calc_col_stats(m_means[:, 3])) df = pd.DataFrame({headers[i]: f_means[:, i] for i in range(4)}) dm = pd.DataFrame({headers[i]: m_means[:, i] for i in range(4)}) # data.boxplot() @@ -253,13 +274,22 @@ def collect_statistics(): # sns.boxplot(data=dm, orient='h', color='#5BCEFA', linewidth=0.5) # sns.stripplot(x="distance", y="method", data=data, size=4, color=".3", linewidth=0) args = dict(orient='h', scale='width', inner='quartile', linewidth=0.5) - sns.violinplot(data=df, color='#F5A9B8', **args) - sns.violinplot(data=dm, color='#5BCEFA', **args) - + #dt=pd.DataFrame({"Female":df, "Male":dm}) + sns.violinplot(data=df, color=COLOR_PINK, **args) + sns.violinplot(data=dm, color=COLOR_BLUE, **args) [c.set_alpha(0.7) for c in ax.collections] + # Create legend + legend_elements = [ + Patch(facecolor=COLOR_PINK, edgecolor='r', label='Feminine'), + Patch(facecolor=COLOR_BLUE, edgecolor='b', label='Masculine'), + ] + plt.legend(handles=legend_elements) + + ax.set_title("Distribution of Pitch and Formant Based on Gender") ax.xaxis.grid(True) ax.set_ylabel('') + ax.set_xlabel('Frequency (Hz)') sns.despine(fig, ax) plt.show()