diff --git a/code/plot_chirp_size.py b/code/plot_chirp_size.py index 894a80b..3547c17 100644 --- a/code/plot_chirp_size.py +++ b/code/plot_chirp_size.py @@ -4,6 +4,7 @@ import os import numpy as np import matplotlib.pyplot as plt +from scipy.stats import pearsonr, spearmanr from thunderfish.powerspectrum import decibel from IPython import embed @@ -12,6 +13,7 @@ from modules.logger import makeLogger from modules.plotstyle import PlotStyle from modules.behaviour_handling import Behavior, correct_chasing_events + ps = PlotStyle() logger = makeLogger(__name__) @@ -50,6 +52,7 @@ def get_chirp_size(folder_name, Behavior, order_meta_df, id_meta_df): folder_row = order_meta_df[order_meta_df['recording'] == foldername] fish1 = folder_row['fish1'].values[0].astype(int) fish2 = folder_row['fish2'].values[0].astype(int) + winner = folder_row['winner'].values[0].astype(int) groub = folder_row['group'].values[0].astype(int) size_fish1_row = id_meta_df[(id_meta_df['group'] == groub) & ( @@ -59,32 +62,57 @@ def get_chirp_size(folder_name, Behavior, order_meta_df, id_meta_df): size_winners = [size_fish1_row[col].values[0] for col in ['l1', 'l2', 'l3']] - mean_size_winner = np.nanmean(size_winners) + size_fish1 = np.nanmean(size_winners) size_losers = [size_fish2_row[col].values[0] for col in ['l1', 'l2', 'l3']] - mean_size_loser = np.nanmean(size_losers) + size_fish2 = np.nanmean(size_losers) + if winner == fish1: + if size_fish1 > size_fish2: + size_diff_bigger = size_fish1 - size_fish2 + size_diff_smaller = size_fish2 - size_fish1 + + elif size_fish1 < size_fish2: + size_diff_bigger = size_fish1 - size_fish2 + size_diff_smaller = size_fish2 - size_fish1 + else: + size_diff_bigger = np.nan + size_diff_smaller = np.nan + winner_fish_id = np.nan + loser_fish_id = np.nan + return size_diff_bigger, size_diff_smaller, winner_fish_id, loser_fish_id - if mean_size_winner > mean_size_loser: - size_diff_bigger = mean_size_winner - mean_size_loser - size_diff_smaller = mean_size_loser - mean_size_winner winner_fish_id = folder_row['rec_id1'].values[0] loser_fish_id = folder_row['rec_id2'].values[0] - elif mean_size_winner < mean_size_loser: - size_diff_bigger = mean_size_loser - mean_size_winner - size_diff_smaller = mean_size_winner - mean_size_loser + elif winner == fish2: + if size_fish2 > size_fish1: + size_diff_bigger = size_fish2 - size_fish1 + size_diff_smaller = size_fish1 - size_fish2 + + elif size_fish2 < size_fish1: + size_diff_bigger = size_fish2 - size_fish1 + size_diff_smaller = size_fish1 - size_fish2 + else: + size_diff_bigger = np.nan + size_diff_smaller = np.nan + winner_fish_id = np.nan + loser_fish_id = np.nan + return size_diff_bigger, size_diff_smaller, winner_fish_id, loser_fish_id + winner_fish_id = folder_row['rec_id2'].values[0] loser_fish_id = folder_row['rec_id1'].values[0] else: - size_diff = np.nan - winner_fish_id = np.nan - loser_fish_id = np.nan + size_diff_bigger = np.nan + size_diff_smaller = np.nan + winner_fish_id = np.nan + loser_fish_id = np.nan + return size_diff_bigger, size_diff_smaller, winner_fish_id, loser_fish_id chirp_winner = len( Behavior.chirps[Behavior.chirps_ids == winner_fish_id]) chirp_loser = len( Behavior.chirps[Behavior.chirps_ids == loser_fish_id]) - + return size_diff_bigger, chirp_winner, size_diff_smaller, chirp_loser @@ -92,27 +120,62 @@ def get_chirp_freq(folder_name, Behavior, order_meta_df): foldername = folder_name.split('/')[-2] folder_row = order_meta_df[order_meta_df['recording'] == foldername] - fish1 = folder_row['rec_id1'].values[0].astype(int) - fish2 = folder_row['rec_id2'].values[0].astype(int) + fish1 = folder_row['fish1'].values[0].astype(int) + fish2 = folder_row['fish2'].values[0].astype(int) + + fish1_freq = folder_row['rec_id1'].values[0].astype(int) + fish2_freq = folder_row['rec_id2'].values[0].astype(int) + winner = folder_row['winner'].values[0].astype(int) chirp_freq_fish1 = np.nanmedian( - Behavior.freq[Behavior.ident == fish1]) + Behavior.freq[Behavior.ident == fish1_freq]) chirp_freq_fish2 = np.nanmedian( - Behavior.freq[Behavior.ident == fish2]) + Behavior.freq[Behavior.ident == fish2_freq]) + + if winner == fish1: + if chirp_freq_fish1 > chirp_freq_fish2: + freq_diff_higher = chirp_freq_fish1 - chirp_freq_fish2 + freq_diff_lower = chirp_freq_fish2 - chirp_freq_fish1 + + elif chirp_freq_fish1 < chirp_freq_fish2: + freq_diff_higher = chirp_freq_fish1 - chirp_freq_fish2 + freq_diff_lower = chirp_freq_fish2 - chirp_freq_fish1 + else: + freq_diff_higher = np.nan + freq_diff_lower = np.nan + winner_fish_id = np.nan + loser_fish_id = np.nan - if chirp_freq_fish1 > chirp_freq_fish2: - freq_diff = chirp_freq_fish1 - chirp_freq_fish2 winner_fish_id = folder_row['rec_id1'].values[0] loser_fish_id = folder_row['rec_id2'].values[0] - elif chirp_freq_fish1 < chirp_freq_fish2: - freq_diff = chirp_freq_fish2 - chirp_freq_fish1 + elif winner == fish2: + if chirp_freq_fish2 > chirp_freq_fish1: + freq_diff_higher = chirp_freq_fish2 - chirp_freq_fish1 + freq_diff_lower = chirp_freq_fish1 - chirp_freq_fish2 + + elif chirp_freq_fish2 < chirp_freq_fish1: + freq_diff_higher = chirp_freq_fish2 - chirp_freq_fish1 + freq_diff_lower = chirp_freq_fish1 - chirp_freq_fish2 + else: + freq_diff_higher = np.nan + freq_diff_lower = np.nan + winner_fish_id = np.nan + loser_fish_id = np.nan + winner_fish_id = folder_row['rec_id2'].values[0] loser_fish_id = folder_row['rec_id1'].values[0] + else: + freq_diff_higher = np.nan + freq_diff_lower = np.nan + winner_fish_id = np.nan + loser_fish_id = np.nan - chirp_diff = len(Behavior.chirps[Behavior.chirps_ids == winner_fish_id]) - len( + chirp_winner = len( + Behavior.chirps[Behavior.chirps_ids == winner_fish_id]) + chirp_loser = len( Behavior.chirps[Behavior.chirps_ids == loser_fish_id]) - return freq_diff, chirp_diff + return freq_diff_higher, chirp_winner, freq_diff_lower, chirp_loser def main(datapath: str): @@ -128,8 +191,17 @@ def main(datapath: str): id_meta_df = read_csv(path_id_meta) chirps_winner = [] - size_diffs = [] - size_chirps_diffs = [] + + size_diffs_winner = [] + size_diffs_loser = [] + size_chirps_winner = [] + size_chirps_loser = [] + + freq_diffs_higher = [] + freq_diffs_lower = [] + freq_chirps_winner = [] + freq_chirps_loser = [] + chirps_loser = [] freq_diffs = [] freq_chirps_diffs = [] @@ -151,17 +223,32 @@ def main(datapath: str): foldername, bh, order_meta_df) chirps_winner.append(winner_chirp) chirps_loser.append(loser_chirp) - size_diff, chirp_diff = get_chirp_size( + + size_diff_bigger, chirp_winner, size_diff_smaller, chirp_loser = get_chirp_size( foldername, bh, order_meta_df, id_meta_df) - size_diffs.append(size_diff) - size_chirps_diffs.append(chirp_diff) - freq_diff, freq_chirps_diff = get_chirp_freq( + freq_diff_higher, chirp_freq_winner, freq_diff_lower, chirp_freq_loser = get_chirp_freq( foldername, bh, order_meta_df) - freq_diffs.append(freq_diff) - freq_chirps_diffs.append(freq_chirps_diff) + + freq_diffs_higher.append(freq_diff_higher) + freq_diffs_lower.append(freq_diff_lower) + freq_chirps_winner.append(chirp_freq_winner) + freq_chirps_loser.append(chirp_freq_loser) - fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(22*ps.cm, 12*ps.cm), width_ratios=[1.5, 1,1]) + if np.isnan(size_diff_bigger): + continue + size_diffs_winner.append(size_diff_bigger) + size_diffs_loser.append(size_diff_smaller) + size_chirps_winner.append(chirp_winner) + size_chirps_loser.append(chirp_loser) + + + embed() + size_winner_pearsonr = pearsonr(size_diffs_winner, size_chirps_winner ) + size_loser_pearsonr = pearsonr(size_diffs_loser, size_chirps_loser ) + + fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=( + 22*ps.cm, 12*ps.cm), width_ratios=[1.5, 1, 1], sharey=True) plt.subplots_adjust(left=0.098, right=0.945, top=0.94, wspace=0.343) scatterwinner = 1.15 scatterloser = 1.85 @@ -189,17 +276,19 @@ def main(datapath: str): ps.set_boxplot_color(bplot1, colors1) colors1 = ps.orange ps.set_boxplot_color(bplot2, colors1) - ax2.scatter(size_diffs, size_chirps_diffs, color='r') - ax2.set_xlabel('Size difference [mm]') + ax2.scatter(size_diffs_winner, size_chirps_winner, color=ps.red) + ax2.scatter(size_diffs_loser, size_chirps_loser, color=ps.orange) + + ax2.set_xlabel('Size difference [cm]') ax2.set_ylabel('Chirps difference [n]') - #ax3.scatter(freq_diffs, size_chirps_diffs, color='r') - # ax3.scatter(freq_diffs, freq_chirps_diffs, color='r') + ax3.scatter(freq_diffs_higher, freq_chirps_winner, color=ps.red) + ax3.scatter(freq_diffs_lower, freq_chirps_loser, color=ps.orange) + ax3.set_xlabel('Frequency difference [Hz]') ax3.set_yticklabels([]) - ax3.set - - #plt.savefig('../poster/figs/chirps_winner_loser.pdf') + # pearson r + plt.savefig('../poster/figs/chirps_winner_loser.pdf') plt.show() diff --git a/poster/figs/chirps_winner_loser.pdf b/poster/figs/chirps_winner_loser.pdf index 723e444..dce23ac 100644 Binary files a/poster/figs/chirps_winner_loser.pdf and b/poster/figs/chirps_winner_loser.pdf differ