From dcffb2fc638e51ff8763b1a52ea032805c21d53d Mon Sep 17 00:00:00 2001 From: wendtalexander Date: Wed, 22 Feb 2023 13:40:57 +0100 Subject: [PATCH] now its the right amount of individuals --- code/plot_chirp_size.py | 33 +++++++++++++++++----------- code/plot_event_timeline.py | 2 ++ poster/figs/chirps_winner_loser.pdf | Bin 0 -> 18064 bytes 3 files changed, 22 insertions(+), 13 deletions(-) create mode 100644 poster/figs/chirps_winner_loser.pdf diff --git a/code/plot_chirp_size.py b/code/plot_chirp_size.py index 92522a8..20ec7f7 100644 --- a/code/plot_chirp_size.py +++ b/code/plot_chirp_size.py @@ -67,6 +67,7 @@ def get_chirp_size(folder_name, Behavior, order_meta_df, id_meta_df): size_losers = [size_fish2_row[col].values[0] for col in ['l1', 'l2', 'l3']] size_fish2 = np.nanmean(size_losers) + if winner == fish1: if size_fish1 > size_fish2: size_diff_bigger = size_fish1 - size_fish2 @@ -76,11 +77,8 @@ def get_chirp_size(folder_name, Behavior, order_meta_df, id_meta_df): 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 + size_diff_bigger = 0 + size_diff_smaller = 0 winner_fish_id = folder_row['rec_id1'].values[0] loser_fish_id = folder_row['rec_id2'].values[0] @@ -94,11 +92,8 @@ def get_chirp_size(folder_name, Behavior, order_meta_df, id_meta_df): 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 + size_diff_bigger = 0 + size_diff_smaller = 0 winner_fish_id = folder_row['rec_id2'].values[0] loser_fish_id = folder_row['rec_id1'].values[0] @@ -107,6 +102,7 @@ def get_chirp_size(folder_name, Behavior, order_meta_df, id_meta_df): 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( @@ -126,11 +122,12 @@ def get_chirp_freq(folder_name, Behavior, order_meta_df): 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_freq]) chirp_freq_fish2 = np.nanmedian( Behavior.freq[Behavior.ident == fish2_freq]) + winner = folder_row['winner'].values[0].astype(int) if winner == fish1: # if chirp_freq_fish1 > chirp_freq_fish2: @@ -174,6 +171,7 @@ def get_chirp_freq(folder_name, Behavior, order_meta_df): loser_fish_freq = np.nan winner_fish_id = np.nan loser_fish_id = np.nan + return winner_fish_freq, winner_fish_id, loser_fish_freq, loser_fish_id chirp_winner = len( Behavior.chirps[Behavior.chirps_ids == winner_fish_id]) @@ -197,6 +195,7 @@ def main(datapath: str): id_meta_df = read_csv(path_id_meta) chirps_winner = [] + chirps_loser = [] size_diffs_winner = [] size_diffs_loser = [] @@ -208,7 +207,6 @@ def main(datapath: str): freq_chirps_winner = [] freq_chirps_loser = [] - chirps_loser = [] freq_diffs = [] freq_chirps_diffs = [] @@ -259,6 +257,16 @@ def main(datapath: str): scatterloser = 1.85 chirps_winner = np.asarray(chirps_winner)[~np.isnan(chirps_winner)] chirps_loser = np.asarray(chirps_loser)[~np.isnan(chirps_loser)] + embed() + exit() + freq_diffs_higher = np.asarray( + freq_diffs_higher)[~np.isnan(freq_diffs_higher)] + freq_diffs_lower = np.asarray(freq_diffs_lower)[ + ~np.isnan(freq_diffs_lower)] + freq_chirps_winner = np.asarray( + freq_chirps_winner)[~np.isnan(freq_chirps_winner)] + freq_chirps_loser = np.asarray( + freq_chirps_loser)[~np.isnan(freq_chirps_loser)] stat = wilcoxon(chirps_winner, chirps_loser) print(stat) @@ -299,7 +307,6 @@ def main(datapath: str): ax2.set_xlabel('Size difference [cm]') # ax2.set_xticks(np.arange(-10, 10.1, 2)) - ax3.scatter(freq_diffs_higher, freq_chirps_winner, color=winner_color) ax3.scatter(freq_diffs_lower, freq_chirps_loser, color=loser_color) diff --git a/code/plot_event_timeline.py b/code/plot_event_timeline.py index 32c0c18..cb75cd9 100644 --- a/code/plot_event_timeline.py +++ b/code/plot_event_timeline.py @@ -48,6 +48,8 @@ def main(datapath: str): # Associate chirps to inidividual fish fish1 = (bh.chirps[bh.chirps_ids == fish1_id] / 60) / 60 fish2 = (bh.chirps[bh.chirps_ids == fish2_id] / 60) / 60 + embed() + exit() fish1_color = ps.gblue2 fish2_color = ps.gblue1 fig, ax = plt.subplots(5, 1, figsize=( diff --git a/poster/figs/chirps_winner_loser.pdf b/poster/figs/chirps_winner_loser.pdf new file mode 100644 index 0000000000000000000000000000000000000000..728ff7ea6bc12664c3dc0698e6cbfaeab5fcc83e GIT binary patch literal 18064 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�~PFJWy+be-PjAd2kFG zfT_Rbp`<~u^=mnlH0F=GC@gH3JP-r^Ru>DRrC;)Z2Mn+U|CWaY;oh%#NGuSf@mn4Y z0sEspBo@@~ztn}JVStJDdma*m3%`{^1LnZ*c`_ir{k0qh2AE#I=lw}D9EkvIquEHPb11z0C>S9oTju#{ShYSJMCWy0t?L!*<$6NyE;Qp9% z7+`h%L7xm9ILz@|don1{8u_&k8PEmrd)}XN55oez{9X==1VPrX?O_2^?~gob!0+*E zIl!X*gJw7k`A1#A3i1a&XWW@>^Xv`p5V6B|8k6pXDA-nuOLvIpC7o