adding plot changes

This commit is contained in:
wendtalexander 2023-01-25 17:47:00 +01:00
parent cdcf9564df
commit 7f17de2748
2 changed files with 127 additions and 38 deletions

View File

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

Binary file not shown.