Skip to content
Snippets Groups Projects
Commit a00e3ff3 authored by Paul Best's avatar Paul Best
Browse files

nicer plots

parent 24614437
No related branches found
No related tags found
No related merge requests found
......@@ -6,7 +6,7 @@ import os, mir_eval
from metadata import species
np.seterr(divide = 'ignore')
fig, ax = plt.subplots(ncols=3, sharey=True, figsize=(10, 4.8))
fig, ax = plt.subplots(ncols=3, sharey=True, figsize=(10, 3.5))
ax[0].set_title('Frequency (Hz)')
ax[1].set_title('# Voiced time bins')
ax[2].set_title('Modulation rate (Hz/sec)')
......
import matplotlib.pyplot as plt
import pandas as pd, numpy as np
from metadata import species
import argparse
algos = ['praat', 'tcrepe_ftsp', 'tcrepe_ftoth', 'basic', 'pesto', 'pesto_ft']
metrics = ['Recall', 'False alarm', 'Pitch acc', 'Chroma acc']
metrics = ['Pitch acc', 'Chroma acc', 'Recall', 'Specificity']
drop_noisy_bins = False
drop_noisy_vocs = False
parser = argparse.ArgumentParser()
parser.add_argument('--drop_noisy_bins', type=bool, help="drop noisy vocalisations", default=False)
parser.add_argument('--drop_noisy_vocs', type=bool, help="drop noisy STFT bins", default=False)
args = parser.parse_args()
drop_noisy_vocs, drop_noisy_bins = args.drop_noisy_vocs, args.drop_noisy_bins
fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(10, 10), sharex=True, sharey=True)
fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(10, 5), sharex=True, sharey=True)
ax[0,0].set_ylim(0, 1)
for i, metric in enumerate(metrics):
ok = pd.DataFrame()
for specie in species:
df = pd.read_csv(f'scores/{specie}_scores{"_minusvocs" if drop_noisy_vocs else ""}{"_minusbins" if drop_noisy_bins else ""}.csv', index_col=0)
df['False alarm'] = 1 - df['False alarm']
df['Specificity'] = 1 - df['False alarm']
ok.loc[specie, df.index] = df[metric]
ok = ok[algos]
# bar plot
m_ax = ax[int(i//2), i%2]
ok.plot.barh(ax=m_ax, legend=None)
ok.plot.bar(ax=m_ax, legend=None, rot=45, width=.6)
m_ax.grid()
m_ax.set_title(metric)
if i%2==1:
m_ax.legend(bbox_to_anchor=(1,1))
plt.tight_layout()
plt.savefig(f'scores{"_minusvocs" if drop_noisy_vocs else ""}{"_minusbins" if drop_noisy_bins else ""}.pdf')
import matplotlib.pyplot as plt
import pandas as pd, numpy as np
from metadata import species
import argparse
algos = ['praat', 'tcrepe', 'tcrepe_ftsp', 'tcrepe_ftoth', 'basic', 'pesto', 'pesto_ft']
metrics = ['Pitch acc', 'Chroma acc', 'Recall', 'False alarm']
parser = argparse.ArgumentParser()
parser.add_argument('--drop_noisy_bins', type=bool, help="drop noisy vocalisations", default=False)
parser.add_argument('--drop_noisy_vocs', type=bool, help="drop noisy STFT bins", default=False)
args = parser.parse_args()
drop_noisy_vocs, drop_noisy_bins = args.drop_noisy_vocs, args.drop_noisy_bins
fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(10, 5), sharex=True, sharey=True)
ax[0,0].set_ylim(0, 1)
for specie in species:
df = pd.read_csv(f'scores/{specie}_scores{"_minusvocs" if drop_noisy_vocs else ""}{"_minusbins" if drop_noisy_bins else ""}.csv', index_col=0)
df['False alarm'] = 1 - df['False alarm']
for algo in algos:
if not algo in df.index:
df.loc[algo, metrics] = [None]*len(metrics)
for i, metric in enumerate(metrics):
ax[int(i//2), i%2].scatter(np.arange(len(algos)), df.loc[algos, metric], label=specie)
for i, metric in enumerate(metrics):
m_ax = ax[int(i//2), i%2]
m_ax.grid()
m_ax.set_title(metric)
plt.xticks(np.arange(len(algos)), algos, rotation=22)
ax[1,0].set_xticklabels(algos, rotation=22)
plt.tight_layout(rect=(0, 0, .87, 1))
ax[0, 1].legend(bbox_to_anchor=(1,1))
plt.savefig(f'scatter_scores{"_minusvocs" if drop_noisy_vocs else ""}{"_minusbins" if drop_noisy_bins else ""}.pdf')
......@@ -7,13 +7,10 @@ import mir_eval, librosa
from metadata import species
np.seterr(divide = 'ignore')
fig, ax = plt.subplots(ncols=2, sharex=True, figsize=(10, 4.8))
fig, ax = plt.subplots(ncols=2, sharey=True, figsize=(10, 3.5))
SNRs, SHRs = [], []
for i, specie in enumerate(species):
wavpath, FS, nfft, downsample = species[specie].values()
dt = nfft / 8 / FS
fns = pd.Series(glob(wavpath))
def fun(fn):
df = pd.read_csv(f'{fn[:-4]}_preds.csv')
......@@ -22,20 +19,16 @@ for i, specie in enumerate(species):
return 0, 0
return df.salience.quantile(.25), df.SHR.quantile(.25)
ret = p_umap(fun, glob(wavpath), desc=specie, num_cpus=40)
SNRs.append(list(zip(*ret))[0])
SHRs.append(list(zip(*ret))[1])
ret = p_umap(fun, glob(species[specie]['wavpath']), desc=specie, num_cpus=40)
ax[0].violinplot(list(zip(*ret))[0], positions=[i], vert=False)
ax[1].violinplot(list(zip(*ret))[1], positions=[i], vert=False)
ax[0].set_title('f0 saliency')
ax[1].set_title('SHR (dB)')
plt.yticks(np.arange(len(species)), [s.replace('_',' ') for s in species])
ax[0].violinplot(SNRs, positions=np.arange(len(species)))
ax[0].set_ylabel('f0 saliency')
ax[1].violinplot(SHRs, positions=np.arange(len(species)))
ax[1].set_ylabel('SHR (dB)')
ax[0].set_xticks(np.arange(len(species)))
ax[0].set_xticklabels(species.keys(), rotation=45)
ax[1].set_xticklabels(species.keys(),rotation=45)
ax[0].hlines(.2, .5, len(species)-.5, linestyle='dashed', colors='k')
ax[1].hlines(10*np.log10(0.2), -.5, len(species)-.5, linestyle='dashed', colors='k')
ax[0].vlines(.2, .5, len(species)-.5, linestyle='dashed', colors='k')
ax[1].vlines(10*np.log10(0.2), -.5, len(species)-.5, linestyle='dashed', colors='k')
plt.tight_layout()
plt.savefig('SNR_distrib.pdf')
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment