diff --git a/code/plot_chirp_bodylegth.py b/code/plot_chirp_bodylegth.py index f629a24..68d31bd 100644 --- a/code/plot_chirp_bodylegth.py +++ b/code/plot_chirp_bodylegth.py @@ -1,4 +1,5 @@ import numpy as np +from extract_chirps import get_valid_datasets import os @@ -116,6 +117,8 @@ def main(datapath: str): foldernames = [ datapath + x + '/' for x in os.listdir(datapath) if os.path.isdir(datapath+x)] + + foldernames, _ = get_valid_datasets(datapath) path_order_meta = ( '/').join(foldernames[0].split('/')[:-2]) + '/order_meta.csv' order_meta_df = read_csv(path_order_meta) @@ -223,7 +226,8 @@ def main(datapath: str): size_chirps_diffs.append(chirp_winner - chirp_loser) freq_diffs.append(freq_winner - freq_loser) - fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(22*ps.cm, 12*ps.cm), width_ratios=[1.5, 1,1]) + fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=( + 22*ps.cm, 12*ps.cm), width_ratios=[1.5, 1, 1]) plt.subplots_adjust(left=0.098, right=0.945, top=0.94, wspace=0.343) scatterwinner = 1.15 scatterloser = 1.85 diff --git a/code/plot_chirp_size.py b/code/plot_chirp_size.py index bc8c3d5..31ed221 100644 --- a/code/plot_chirp_size.py +++ b/code/plot_chirp_size.py @@ -1,10 +1,11 @@ import numpy as np +from extract_chirps import get_valid_datasets import os import numpy as np import matplotlib.pyplot as plt -from scipy.stats import pearsonr, spearmanr +from scipy.stats import pearsonr, spearmanr, wilcoxon from thunderfish.powerspectrum import decibel from IPython import embed @@ -75,10 +76,10 @@ 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_bigger = np.nan size_diff_smaller = np.nan - winner_fish_id = np.nan - loser_fish_id = 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_id1'].values[0] @@ -93,19 +94,19 @@ 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_bigger = np.nan size_diff_smaller = np.nan - winner_fish_id = np.nan - loser_fish_id = 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_bigger = np.nan + size_diff_bigger = np.nan size_diff_smaller = np.nan - winner_fish_id = np.nan - loser_fish_id = 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( @@ -182,6 +183,7 @@ def main(datapath: str): foldernames = [ datapath + x + '/' for x in os.listdir(datapath) if os.path.isdir(datapath+x)] + foldernames, _ = get_valid_datasets(datapath) path_order_meta = ( '/').join(foldernames[0].split('/')[:-2]) + '/order_meta.csv' order_meta_df = read_csv(path_order_meta) @@ -229,7 +231,7 @@ def main(datapath: str): freq_diff_higher, chirp_freq_winner, freq_diff_lower, chirp_freq_loser = get_chirp_freq( foldername, bh, order_meta_df) - + freq_diffs_higher.append(freq_diff_higher) freq_diffs_lower.append(freq_diff_lower) freq_chirps_winner.append(chirp_freq_winner) @@ -242,24 +244,25 @@ def main(datapath: str): size_chirps_winner.append(chirp_winner) size_chirps_loser.append(chirp_loser) - - size_winner_pearsonr = pearsonr(size_diffs_winner, size_chirps_winner ) - size_loser_pearsonr = pearsonr(size_diffs_loser, size_chirps_loser ) + size_winner_pearsonr = pearsonr(size_diffs_winner, size_chirps_winner) + size_loser_pearsonr = pearsonr(size_diffs_loser, size_chirps_loser) fig, (ax1, ax2) = plt.subplots(1, 2, figsize=( - 22*ps.cm, 12*ps.cm), sharey=True) + 13*ps.cm, 10*ps.cm), sharey=True) plt.subplots_adjust(left=0.098, right=0.945, top=0.94, wspace=0.343) scatterwinner = 1.15 scatterloser = 1.85 chirps_winner = np.asarray(chirps_winner)[~np.isnan(chirps_winner)] chirps_loser = np.asarray(chirps_loser)[~np.isnan(chirps_loser)] - + + stat = wilcoxon(chirps_winner, chirps_loser) + print(stat) bplot1 = ax1.boxplot(chirps_winner, positions=[ - 1], showfliers=False, patch_artist=True) + 0.9], showfliers=False, patch_artist=True) bplot2 = ax1.boxplot(chirps_loser, positions=[ - 2], showfliers=False, patch_artist=True) + 2.1], showfliers=False, patch_artist=True) ax1.scatter(np.ones(len(chirps_winner)) * scatterwinner, chirps_winner, color=ps.red) ax1.scatter(np.ones(len(chirps_loser)) * @@ -270,19 +273,27 @@ def main(datapath: str): for w, l in zip(chirps_winner, chirps_loser): ax1.plot([scatterwinner, scatterloser], [w, l], - color='r', alpha=0.5, linewidth=0.5) - ax1.set_ylabel('Chirps [n]', color=ps.white) + color=ps.white, alpha=1, linewidth=0.5) + ax1.set_ylabel('chirps [n]', color=ps.white) + ax1.set_xlabel('outcome', color=ps.white) colors1 = ps.red ps.set_boxplot_color(bplot1, colors1) colors1 = ps.orange ps.set_boxplot_color(bplot2, colors1) - ax2.scatter(size_diffs_winner, size_chirps_winner, color=ps.red) - ax2.scatter(size_diffs_loser, size_chirps_loser, color=ps.orange) + ax2.scatter(size_diffs_winner, size_chirps_winner, + color=ps.red, label='winner') + ax2.scatter(size_diffs_loser, size_chirps_loser, + color=ps.orange, label='loser') + + ax2.set_xlabel('size difference [cm]') + # ax2.set_xticks(np.arange(-10, 10.1, 2)) + + handles, labels = ax2.get_legend_handles_labels() + fig.legend(handles, labels, loc='upper center', ncol=2) + plt.subplots_adjust(left=0.162, right=0.97, top=0.85, bottom=0.176) - ax2.set_xlabel('Size difference [cm]') - ax2.set_xticks(np.arange(-10, 10.1, 2)) # pearson r plt.savefig('../poster/figs/chirps_winner_loser.pdf') plt.show() diff --git a/code/plot_event_timeline.py b/code/plot_event_timeline.py index cbf2846..311b64f 100644 --- a/code/plot_event_timeline.py +++ b/code/plot_event_timeline.py @@ -1,9 +1,9 @@ import numpy as np -import os +import os import numpy as np -import matplotlib.pyplot as plt +import matplotlib.pyplot as plt from thunderfish.powerspectrum import decibel from IPython import embed @@ -12,21 +12,24 @@ from modules.logger import makeLogger from modules.plotstyle import PlotStyle from modules.behaviour_handling import Behavior, correct_chasing_events +from extract_chirps import get_valid_datasets ps = PlotStyle() logger = makeLogger(__name__) def main(datapath: str): - - foldernames = [datapath + x + '/' for x in os.listdir(datapath) if os.path.isdir(datapath+x)] + + foldernames = [ + datapath + x + '/' for x in os.listdir(datapath) if os.path.isdir(datapath+x)] + foldernames, _ = get_valid_datasets(datapath) for foldername in foldernames: - #foldername = foldernames[0] + #foldername = foldernames[0] if foldername == '../data/mount_data/2020-05-12-10_00/': continue - #behabvior is pandas dataframe with all the data + # behabvior is pandas dataframe with all the data bh = Behavior(foldername) - #2020-06-11-10 + # 2020-06-11-10 category = bh.behavior timestamps = bh.start_s # Correct for doubles in chasing on- and offsets to get the right on-/offset pairs @@ -34,46 +37,49 @@ def main(datapath: str): category, timestamps = correct_chasing_events(category, timestamps) # split categories - chasing_onset = (timestamps[category == 0]/ 60) /60 - chasing_offset = (timestamps[category == 1]/ 60) /60 - physical_contact = (timestamps[category == 2] / 60) /60 + chasing_onset = (timestamps[category == 0] / 60) / 60 + chasing_offset = (timestamps[category == 1] / 60) / 60 + physical_contact = (timestamps[category == 2] / 60) / 60 all_fish_ids = np.unique(bh.chirps_ids) fish1_id = all_fish_ids[0] fish2_id = all_fish_ids[1] # 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 + fish1 = (bh.chirps[bh.chirps_ids == fish1_id] / 60) / 60 + fish2 = (bh.chirps[bh.chirps_ids == fish2_id] / 60) / 60 fish1_color = ps.red fish2_color = ps.orange - fig, ax = plt.subplots(4, 1, figsize=(21*ps.cm, 13*ps.cm), height_ratios=[0.5, 0.5, 0.5, 6], sharex=True) - # marker size + fig, ax = plt.subplots(4, 1, figsize=( + 21*ps.cm, 13*ps.cm), height_ratios=[0.5, 0.5, 0.5, 6], sharex=True) + # marker size s = 200 - ax[0].scatter(physical_contact, np.ones(len(physical_contact)), color='firebrick', marker='|', s=s) - ax[1].scatter(chasing_onset, np.ones(len(chasing_onset)), color='green', marker='|', s=s ) - ax[2].scatter(fish1, np.ones(len(fish1))-0.25, color=fish1_color, marker='|', s=s) - ax[2].scatter(fish2, np.zeros(len(fish2))+0.25, color=fish2_color, marker='|', s=s) - - - freq_temp = bh.freq[bh.ident==fish1_id] - time_temp = bh.time[bh.idx[bh.ident==fish1_id]] - ax[3].plot((time_temp/ 60) /60, freq_temp, color=fish1_color) - - freq_temp = bh.freq[bh.ident==fish2_id] - time_temp = bh.time[bh.idx[bh.ident==fish2_id]] - ax[3].plot((time_temp/ 60) /60, freq_temp, color=fish2_color) + ax[0].scatter(physical_contact, np.ones( + len(physical_contact)), color='firebrick', marker='|', s=s) + ax[1].scatter(chasing_onset, np.ones(len(chasing_onset)), + color='green', marker='|', s=s) + ax[2].scatter(fish1, np.ones(len(fish1))-0.25, + color=fish1_color, marker='|', s=s) + ax[2].scatter(fish2, np.zeros(len(fish2))+0.25, + color=fish2_color, marker='|', s=s) + + freq_temp = bh.freq[bh.ident == fish1_id] + time_temp = bh.time[bh.idx[bh.ident == fish1_id]] + ax[3].plot((time_temp / 60) / 60, freq_temp, color=fish1_color) + + freq_temp = bh.freq[bh.ident == fish2_id] + time_temp = bh.time[bh.idx[bh.ident == fish2_id]] + ax[3].plot((time_temp / 60) / 60, freq_temp, color=fish2_color) #ax[3].imshow(decibel(bh.spec), extent=[bh.time[0]/60/60, bh.time[-1]/60/60, 0, 2000], aspect='auto', origin='lower') - # Hide grid lines + # Hide grid lines ax[0].grid(False) ax[0].set_frame_on(False) ax[0].set_xticks([]) ax[0].set_yticks([]) ps.hide_ax(ax[0]) - ax[1].grid(False) ax[1].set_frame_on(False) ax[1].set_xticks([]) @@ -86,26 +92,26 @@ def main(datapath: str): ax[2].set_xticks([]) ps.hide_ax(ax[2]) - - ax[3].axvspan(3, 6, 0, 5, facecolor='grey', alpha=0.5) ax[3].set_xticks(np.arange(0, 6.1, 0.5)) labelpad = 40 - fsize = 12 - ax[0].set_ylabel('Physical contact', rotation=0, labelpad=labelpad, fontsize=fsize) - ax[1].set_ylabel('Chasing events', rotation=0, labelpad=labelpad, fontsize=fsize) - ax[2].set_ylabel('Chirps', rotation=0, labelpad=labelpad, fontsize=fsize) + fsize = 12 + ax[0].set_ylabel('Physical contact', rotation=0, + labelpad=labelpad, fontsize=fsize) + ax[1].set_ylabel('Chasing events', rotation=0, + labelpad=labelpad, fontsize=fsize) + ax[2].set_ylabel('Chirps', rotation=0, + labelpad=labelpad, fontsize=fsize) ax[3].set_ylabel('EODf') ax[3].set_xlabel('Time [h]') ax[0].set_title(foldername.split('/')[-2]) # 2020-03-31-9_59 plt.subplots_adjust(left=0.158, right=0.987, top=0.918) - #plt.savefig('../poster/figs/timeline.pdf') + # plt.savefig('../poster/figs/timeline.pdf') plt.show() - # plot chirps diff --git a/poster/figs/chirps_winner_loser.pdf b/poster/figs/chirps_winner_loser.pdf index d38726b..80312fb 100644 Binary files a/poster/figs/chirps_winner_loser.pdf and b/poster/figs/chirps_winner_loser.pdf differ diff --git a/poster/main.pdf b/poster/main.pdf new file mode 100644 index 0000000..1a47204 Binary files /dev/null and b/poster/main.pdf differ