Upload files to ''
This commit is contained in:
parent
b810e4bd77
commit
e564736eef
134
params.py
Normal file
134
params.py
Normal file
@ -0,0 +1,134 @@
|
||||
import matplotlib.colors as mcolors
|
||||
import matplotlib as mpl
|
||||
import matplotlib.dates as mdates
|
||||
import matplotlib.pyplot as plt
|
||||
import datetime
|
||||
import numpy as np
|
||||
from IPython import embed
|
||||
|
||||
#############################################################################################
|
||||
# default fontsize
|
||||
plt.rcParams['font.size'] = 11
|
||||
plt.rcParams['axes.linewidth'] = 2
|
||||
|
||||
#############################################################################################
|
||||
# for boxplots
|
||||
props = dict(linewidth=2, color='black')
|
||||
props_a = dict(linewidth=2, color='#884ea0')
|
||||
props_e = dict(linewidth=2, color='#656565')
|
||||
flierprops = dict(marker='o', markeredgecolor='#656565', markersize=6, linestyle='none')
|
||||
|
||||
#############################################################################################
|
||||
# time boundaries of day, dusk, night and dawn
|
||||
time_bound = ['1900_01_01_6_30', '1900_01_01_16_30', '1900_01_01_18_30',
|
||||
'1900_01_02_4_30', '1900_01_02_6_30', '1900_01_02_16_30']
|
||||
time_boxes = []
|
||||
for i in range(len(time_bound)):
|
||||
time_boxes.append(datetime.datetime.strptime(time_bound[i], '%Y_%m_%d_%H_%M'))
|
||||
datetime_box = mdates.date2num(time_boxes)
|
||||
|
||||
# bin length for activity calculations in second
|
||||
bin_len = 5
|
||||
#############################################################################################
|
||||
# colors
|
||||
color_efm = ['#2e4053', '#ab1717', '#004d8d', '#000000']
|
||||
color_diffdays = ['#1b2631', '#2e4053', '#5d6d7e', '#aeb6bf']
|
||||
|
||||
cd = ['#566573', '#2c3e50', '#abb2b9', '#2471a3', '#1a5276', '#a9cce3']
|
||||
cm20c = plt.cm.get_cmap('tab20c')
|
||||
color2 = ['#f39c12', '#d35400', '#fad7a0', '#e59866', '#c0392b', '#d98880', '#f1c40f']
|
||||
color_dadunida = ['#DFD13A', '#c0392b', '#62285B', '#CE7227']
|
||||
|
||||
farben = list(mcolors.CSS4_COLORS)
|
||||
color_vec = []
|
||||
for i in range(len(farben)):
|
||||
color_vec.append(mcolors.CSS4_COLORS[farben[i]])
|
||||
color_vec = sorted(color_vec)
|
||||
|
||||
#############################################################################################
|
||||
# labels
|
||||
labels = ['$\it{Eigenmannia\,sp.}$', '$\it{A.\,macrostomus}\,\u2640$', '$\it{A.\,macrostomus}\,\u2642$', 'unknown']
|
||||
|
||||
#############################################################################################
|
||||
# plot params
|
||||
fs = 11 # font_size
|
||||
fs_ticks = 11 # fs_ticks
|
||||
lw = 2 # linewidth
|
||||
a = 0.3 # alpha
|
||||
ms = 7
|
||||
h_bins = 30 # hist_bins
|
||||
save_path = '../../thesis/Figures/Results/'
|
||||
save_path_pres = '../../pres_ergebnisse/figures/'
|
||||
|
||||
inch = 2.45
|
||||
|
||||
#############################################################################################
|
||||
# for nice plots
|
||||
def nice_ax(ax):
|
||||
'''
|
||||
Makes nice x and y axis:
|
||||
top and right axis invisible and axis width = 2 and axis ticks labelsize = 11
|
||||
:param ax:
|
||||
:return:
|
||||
'''
|
||||
ax.spines["top"].set_visible(False)
|
||||
ax.spines["right"].set_visible(False)
|
||||
ax.tick_params(width=2)
|
||||
ax.tick_params(axis='both', which='major', labelsize=11)
|
||||
|
||||
|
||||
mpl.axes.Axes.make_nice_ax = nice_ax
|
||||
|
||||
|
||||
def beau_time_channel_axis(ax):
|
||||
'''
|
||||
Makes nice axis for trajectory plots:
|
||||
top and right axis invisible and axis width = 2 and axis ticks labelsize = 11
|
||||
white line for the gap: y = 7.5
|
||||
y ticks and yticklabels: ticks at each electrode, labels at every second
|
||||
x and y labels
|
||||
:param ax:
|
||||
:return:
|
||||
'''
|
||||
ax.spines["top"].set_visible(False)
|
||||
ax.spines["right"].set_visible(False)
|
||||
ax.tick_params(width=2)
|
||||
ax.tick_params(axis='both', which='major', labelsize=11)
|
||||
# ax.set_ylim([0, 15])
|
||||
ax.axhline(7.5, xmin=0, xmax=15, color='white', lw=4)
|
||||
# ax.set_yticklabels([1, 3, 5, 7, 14, 16, 18, 20])
|
||||
ax.set_yticks([0, 1, 2, 3, 4, 5, 6, 7, 7.5, 8, 9, 10, 11, 12, 13, 14, 15])
|
||||
ax.set_yticklabels(['1', '', '3', '', '5', '', '7', '', 'gap', '', '10', '', '12', '', '14', '', '16'])
|
||||
# ax.set_yticklabels([0, 0, 2, 4, 6, 13, 15, 17, 19])
|
||||
ax.invert_yaxis()
|
||||
ax.set_xlabel('Time', fontsize=11)
|
||||
ax.set_ylabel('Electrode', fontsize=11)
|
||||
|
||||
|
||||
mpl.axes.Axes.beautimechannelaxis = beau_time_channel_axis
|
||||
|
||||
|
||||
def timeaxis(ax):
|
||||
'''
|
||||
Makes nice time axis for datetime x values:
|
||||
top and right axis invisible and axis width = 2 and axis ticks labelsize = 11
|
||||
converts the x ticks in the date format into a real time axis of the form H:M
|
||||
:param ax:
|
||||
:return:
|
||||
'''
|
||||
|
||||
ax.spines["top"].set_visible(False)
|
||||
ax.spines["right"].set_visible(False)
|
||||
ax.tick_params(width=2)
|
||||
ax.tick_params(axis='both', which='major', labelsize=11)
|
||||
ax.xaxis_date()
|
||||
date_format = mdates.DateFormatter('%H:%M')
|
||||
# date_format = mdates.DateFormatter('%d.%m.%Y %H:%M')
|
||||
ax.xaxis.set_major_formatter(date_format)
|
||||
|
||||
|
||||
mpl.axes.Axes.timeaxis = timeaxis
|
||||
|
||||
|
||||
|
||||
|
132
plot_activity_freq.py
Normal file
132
plot_activity_freq.py
Normal file
@ -0,0 +1,132 @@
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
import matplotlib.dates as mdates
|
||||
import matplotlib.colors as mcolors
|
||||
import matplotlib.gridspec as gridspec
|
||||
from IPython import embed
|
||||
from scipy import stats
|
||||
import os
|
||||
from IPython import embed
|
||||
from params import *
|
||||
import datetime
|
||||
import itertools
|
||||
from statisitic_functions import *
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
###################################################################################################################
|
||||
# parameter
|
||||
# save_path = '../../thesis/Figures/Results/'
|
||||
# inch = 2.45
|
||||
cat_v1 = [0, 0, 750, 0]
|
||||
cat_v2 = [750, 750, 1000, 1000]
|
||||
cat_v = [0, 580, 750, 1000]
|
||||
cat_n = ['Eigenmannia', 'Apteronotus', 'Apteronotus']
|
||||
pos = [1, 2, 3, 4]
|
||||
|
||||
###################################################################################################################
|
||||
# load data
|
||||
freq = np.load('../data/f.npy', allow_pickle=True)
|
||||
c = np.load('../data/all_changes.npy', allow_pickle=True)
|
||||
names = np.load('../data/n.npy', allow_pickle=True)
|
||||
stl = np.load('../data/stl.npy', allow_pickle=True)
|
||||
|
||||
###################################################################################################################
|
||||
# figure
|
||||
fig = plt.figure(figsize=[16 / inch, 8 / inch])
|
||||
spec = gridspec.GridSpec(ncols=3, nrows=1, figure=fig, hspace=0.3, wspace=0.2,
|
||||
width_ratios=[4,1,2], left=0.08, bottom=0.15, right=0.95, top=0.90)
|
||||
ax = fig.add_subplot(spec[0, 0])
|
||||
ax1 = fig.add_subplot(spec[0, 2])
|
||||
ax2 = fig.add_subplot(spec[0, 1])
|
||||
|
||||
###############################################################################################################
|
||||
# analysis: separates the activity and frequencies by the species and sex
|
||||
activitys = []
|
||||
freqs = []
|
||||
for p in range(3):
|
||||
f = freq[(names == cat_n[p]) & (freq >= cat_v1[p]) & (freq < cat_v2[p])]
|
||||
a = c[(names == cat_n[p]) & (freq >= cat_v1[p]) & (freq < cat_v2[p])]
|
||||
|
||||
# f = freq[(names == cat_n[p]) & (freq >= cat_v1[p]) & (freq < cat_v2[p]) & (stl==False)]
|
||||
# a = c[(names == cat_n[p]) & (freq >= cat_v1[p]) & (freq < cat_v2[p]) & (stl==False)]
|
||||
#
|
||||
# f_m = freq[(names == cat_n[p]) & (freq >= cat_v1[p]) & (freq < cat_v2[p]) & stl]
|
||||
# a_m = c[(names == cat_n[p]) & (freq >= cat_v1[p]) & (freq < cat_v2[p]) & stl]
|
||||
|
||||
activitys.append(a)
|
||||
freqs.append(f)
|
||||
|
||||
###############################################################################################################
|
||||
# point plot of freq vs activity
|
||||
ax.plot(f, a, 'o', alpha=0.7, color=color_efm[p], label=labels[p])
|
||||
# ax.plot(f_m, a_m, 'o', alpha=0.7, color=color_efm[p], markeredgecolor='k')
|
||||
ax.set_xlim(400, 1000)
|
||||
ax.set_xticks([400, 600, 800, 1000])
|
||||
ax.set_xticklabels([400, 600, 800, 1000])
|
||||
ax.set_xlabel('EODf [Hz]', fontsize=fs)
|
||||
ax.set_ylabel('Activity [Changes/min]', fontsize=fs)
|
||||
ax.set_ylim(-0.2, 6)
|
||||
|
||||
###############################################################################################################
|
||||
# boxplot
|
||||
bp = ax1.boxplot(activitys, widths=0.6, showfliers=False)
|
||||
for element in ['boxes', 'medians']:
|
||||
for idx in range(3):
|
||||
bp[element][idx].set(linewidth=2, color=color_efm[idx])
|
||||
|
||||
for element in ['whiskers', 'caps']:
|
||||
for idx, num in enumerate([0,2,4]):
|
||||
for i in [0,1]:
|
||||
bp[element][num+i].set(linewidth=2, color=color_efm[idx])
|
||||
if element == 'whiskers' and i == 1:
|
||||
ax1.text(idx+1, bp['whiskers'][num+i].get_ydata()[1]+0.3, str(len(activitys[idx])),
|
||||
horizontalalignment='center')
|
||||
|
||||
###############################################################################################################
|
||||
# histogram: activity distribution
|
||||
for j in [1,2,0]:
|
||||
n, bins = np.histogram(activitys[j], bins=np.arange(0,8.2,0.2))
|
||||
ax2.hist(activitys[j], bins=np.arange(0,8.2,0.25), orientation='horizontal', histtype='step',
|
||||
color=color_efm[j], linewidth=2)
|
||||
|
||||
################################################################################################################
|
||||
# statisitics: cohens d' and mann whitney u
|
||||
|
||||
for subset in itertools.combinations([0,1,2], 2):
|
||||
print(labels[subset[0]], labels[subset[1]])
|
||||
U, p = stats.mannwhitneyu(activitys[subset[0]], activitys[subset[1]])
|
||||
print('U = ', U, 'p = ', p*3)
|
||||
r = 1-(2*U)/(len(activitys[subset[0]])*len(activitys[subset[1]]))
|
||||
print('r = ',r)
|
||||
print('d = ',cohen_d(activitys[subset[0]], activitys[subset[1]]))
|
||||
significance_bar(ax1, p*3, None, subset[0]+1, subset[1]+1, 3.8)
|
||||
|
||||
#################################################################################################################
|
||||
# nice axis
|
||||
tagx = [-0.15, -0.4, -0.17]
|
||||
tagy = [1.05,1.05,1.05]
|
||||
for ax_idx, axis in enumerate([ax,ax2,ax1]):
|
||||
axis.text(tagx[ax_idx], tagy[ax_idx], chr(ord('A') + ax_idx), transform=axis.transAxes, fontsize='large')
|
||||
axis.make_nice_ax()
|
||||
|
||||
ax1.set_xlim(0.5,3.5)
|
||||
ax1.set_xticks([1, 2, 3])
|
||||
ax1.set_xticklabels(['$\it{E}$', '$\it{A}\u2640$', '$\it{A}\u2642$'])
|
||||
ax1.set_xlabel('Species', fontsize=fs)
|
||||
|
||||
ax1.set_ylim(ax.get_ylim())
|
||||
ax1.spines["left"].set_visible(False)
|
||||
ax1.get_yaxis().set_visible(False)
|
||||
|
||||
ax2.set_ylim(ax.get_ylim())
|
||||
ax2.set_yticklabels('')
|
||||
ax2.set_xlabel('n', fontsize=fs)
|
||||
|
||||
fig.align_xlabels([ax,ax1,ax2])
|
||||
fig.legend(loc='upper right', bbox_to_anchor=(0.9, 0.85, 0.1, 0.1))
|
||||
|
||||
# fig.savefig(save_path_pres+'activ_freq.pdf')
|
||||
# fig.savefig(save_path+'activ_freq.pdf')
|
||||
plt.show()
|
||||
embed()
|
181
plot_activity_time.py
Normal file
181
plot_activity_time.py
Normal file
@ -0,0 +1,181 @@
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
import matplotlib.dates as mdates
|
||||
import matplotlib.colors as mcolors
|
||||
import matplotlib.gridspec as gridspec
|
||||
from IPython import embed
|
||||
from scipy import stats
|
||||
import math
|
||||
import os
|
||||
from IPython import embed
|
||||
import helper_functions as hf
|
||||
from params import *
|
||||
from statisitic_functions import *
|
||||
import itertools
|
||||
import random
|
||||
|
||||
|
||||
def get_recording_number_in_time_bins(time_bins):
|
||||
"""
|
||||
Calculates the number of the recordings in the time bins
|
||||
|
||||
:param time_bins: numpy array with borders of the time bins
|
||||
:return: time_bins_recording: numpy array with the number of recordings to that specific time bin
|
||||
"""
|
||||
# variables
|
||||
time_bins_recordings = np.zeros(len(time_bins) - 1)
|
||||
|
||||
# load data
|
||||
for index, filename_idx in enumerate([0, 1, 2, 3]):
|
||||
filename = sorted(os.listdir('../data/'))[filename_idx]
|
||||
time_points = np.load('../data/' + filename + '/all_hms.npy', allow_pickle=True)
|
||||
|
||||
# in which bins is this recording, fill time_bins_recordings
|
||||
unique_time_points = np.unique(np.hstack(time_points))
|
||||
for idx, tb in enumerate(time_bins[:-1]):
|
||||
if np.any((unique_time_points >= tb) & (unique_time_points <= time_bins[idx + 1])):
|
||||
time_bins_recordings[idx] += 1
|
||||
|
||||
return time_bins_recordings
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
###################################################################################################################
|
||||
# parameter and variables
|
||||
# plot params
|
||||
c = 0
|
||||
cc = 1
|
||||
|
||||
all_changes = []
|
||||
all_first = []
|
||||
all_last = []
|
||||
|
||||
# time_bins 5 min
|
||||
time_factor = 60 * 60
|
||||
time_bins = np.arange(0, 24 * time_factor + 1, bin_len)
|
||||
# time_bins_recordings = np.zeros(len(time_bins) - 1)
|
||||
|
||||
# percent roaming
|
||||
pr = []
|
||||
|
||||
# kernel
|
||||
kernel_size = 120
|
||||
kernel = np.ones(kernel_size) / kernel_size
|
||||
|
||||
###################################################################################################################
|
||||
# load data
|
||||
###################################################################################################################
|
||||
# load all the data of one day
|
||||
cbf = np.load('../data/cbf5.npy', allow_pickle=True)
|
||||
# embed()
|
||||
# quit()
|
||||
N_rec_time_bins = get_recording_number_in_time_bins(time_bins)
|
||||
|
||||
###################################################################################################################
|
||||
# time zones
|
||||
time_edges = np.array([4.5, 6.5, 16.5, 18.5]) * time_factor
|
||||
day = (time_bins[:-1] >= time_edges[1]) & (time_bins[:-1] <= time_edges[2])
|
||||
dusk = (time_bins[:-1] >= time_edges[2]) & (time_bins[:-1] <= time_edges[3])
|
||||
night = (time_bins[:-1] <= time_edges[0]) | (time_bins[:-1] >= time_edges[3])
|
||||
dawn = (time_bins[:-1] >= time_edges[0]) & (time_bins[:-1] <= time_edges[1])
|
||||
|
||||
###################################################################################################################
|
||||
# activity in time bins
|
||||
activity = np.full(len(time_bins) - 1, np.nan)
|
||||
|
||||
for i in range(len(activity)):
|
||||
activity[i] = np.nansum(cbf[:2, i]) # * (60/bin_len)
|
||||
|
||||
# activity for boxplot in time zones
|
||||
activ_boxes = [[], [], [], []]
|
||||
activ_boxes_corr = [[], [], [], []]
|
||||
activC = activity / N_rec_time_bins
|
||||
conv_activ = np.convolve(activity, kernel, 'same')
|
||||
conv_N_rec_tb = np.convolve(N_rec_time_bins, kernel, 'same')
|
||||
|
||||
activ_boxes[2].extend(activC[night]) # 18:30 - 04:30
|
||||
activ_boxes[1].extend(activC[dawn]) # 04:30 - 06:30
|
||||
activ_boxes[0].extend(activC[day]) # 06:30 - 16:30
|
||||
activ_boxes[3].extend(activC[dusk]) # 16:30 - 18:30
|
||||
|
||||
# correction if nans in array
|
||||
for j in range(4):
|
||||
b = np.array(activ_boxes[j])
|
||||
activ_boxes_corr[j] = b[~np.isnan(b)]
|
||||
t_b = np.array(time_bins[:-1][day])
|
||||
t_b = t_b[~np.isnan(np.array(activ_boxes[0]))]
|
||||
|
||||
# rolled time axis for nicer plot midnight in the middle start noon
|
||||
rolled_time = np.roll(time_bins[:-1] / time_factor, int(len(time_bins[:-1]) / 2))
|
||||
rolled_activ = np.roll(activC, int(len(time_bins[:-1]) / 2))
|
||||
rolled_conv_activ = np.roll(conv_activ / conv_N_rec_tb, int(len(time_bins[:-1]) / 2) + 1)
|
||||
|
||||
###################################################################################################################
|
||||
# activity over time
|
||||
fig5 = plt.figure(constrained_layout=True, figsize=[15 / inch, 8 / inch])
|
||||
gs = gridspec.GridSpec(ncols=2, nrows=1, figure=fig5, hspace=0.05, wspace=0.0,
|
||||
width_ratios=[6, 3], left=0.1, bottom=0.15, right=0.95, top=0.98)
|
||||
|
||||
ax5 = fig5.add_subplot(gs[0, 0])
|
||||
ax6 = fig5.add_subplot(gs[0, 1])
|
||||
|
||||
ax5.plot(rolled_activ, color=color2[5])
|
||||
ax5.plot(rolled_conv_activ, color=color2[4])
|
||||
|
||||
ax5.plot([16.5*time_factor/5, 6.5*time_factor/bin_len], [9, 9], color=color_diffdays[0], lw=7)
|
||||
ax5.plot([16.5*time_factor/5, 18.5*time_factor/bin_len], [9, 9], color=color_diffdays[3], lw=7)
|
||||
ax5.plot([4.5*time_factor/5, 6.5*time_factor/bin_len], [9, 9], color=color_diffdays[3], lw=7)
|
||||
|
||||
# ax5.set_xlim(0, 24)
|
||||
ax5.set_xticks(np.arange(0, 25, 6) * time_factor / bin_len)
|
||||
ax5.set_xticklabels(['12:00', '18:00', '00:00', '06:00', '12:00'])
|
||||
# ax4.set_yticks([0.00, 0.01, 0.02, 0.03])
|
||||
ax5.set_xlabel('Time', fontsize=fs)
|
||||
ax5.set_ylabel('Activity [Changes/ ' + str(bin_len) + ' s]', fontsize=fs)
|
||||
|
||||
for idx_zone, plot_zone, color_zone, day_zone, pos_zone in \
|
||||
zip([0, 1, 2, 3], [day, dusk, night, dawn], [6, 1, 4, 0], ['day', 'dusk', 'night', 'dawn'], [1, 2, 3, 4]):
|
||||
|
||||
# boxplot ax1
|
||||
props_e = dict(linewidth=2, color=color_dadunida[idx_zone])
|
||||
bp = ax6.boxplot(activ_boxes_corr[idx_zone], positions=[pos_zone], widths=0.7, showfliers=False,
|
||||
boxprops=props_e, medianprops=props_e, capprops=props_e, whiskerprops=props_e)
|
||||
# ax6.boxplot(activ_boxes_corr, positions=[1, 2, 3, 4], widths=0.7, showfliers=False,
|
||||
# boxprops=props_e, medianprops=props_e, capprops=props_e, whiskerprops=props_e)
|
||||
|
||||
ax6.set_xticks([1, 2, 3, 4])
|
||||
ax6.set_xticklabels(['day', 'dusk', 'night', 'dawn'])
|
||||
|
||||
for ax_idx, axis in enumerate([ax5, ax6]):
|
||||
axis.text(-0.12, 1, chr(ord('A') + ax_idx), transform=axis.transAxes, fontsize='large')
|
||||
axis.make_nice_ax()
|
||||
|
||||
# ax5.set_ylim([ax5.get_ylim()[0], 9.5])
|
||||
ax6.set_ylim(ax5.get_ylim())
|
||||
|
||||
dc = [6.3, 7.2, 8.1, 6.3, 9.0, 6.3]
|
||||
c = 0
|
||||
for subset in itertools.combinations([0, 1, 2, 3], 2):
|
||||
print(subset[0], subset[1])
|
||||
# print(stats.mannwhitneyu(activ_boxes_corr[subset[0]], activ_boxes_corr[subset[1]]))
|
||||
U, p = stats.mannwhitneyu(activ_boxes_corr[subset[0]], activ_boxes_corr[subset[1]])
|
||||
print(U, p * 4)
|
||||
r = 1 - (2 * U) / (len(activ_boxes_corr[subset[0]]) * len(activ_boxes_corr[subset[1]]))
|
||||
# print(r)
|
||||
d = cohen_d(activ_boxes_corr[subset[0]], activ_boxes_corr[subset[1]])
|
||||
significance_bar(ax6, None, d, subset[0] + 1, subset[1] + 1, dc[c])
|
||||
c += 1
|
||||
|
||||
# fig5.savefig(save_path + 'activ_time.png')
|
||||
fig5.savefig(save_path + 'activ_time_box.pdf')
|
||||
plt.show()
|
||||
|
||||
###################################################################################################################
|
||||
# statistic
|
||||
|
||||
print(stats.pearsonr(activ_boxes_corr[0], t_b))
|
||||
print(stats.pearsonr(activ_boxes_corr[1], time_bins[:-1][dawn]))
|
||||
print(stats.pearsonr(activ_boxes_corr[2], time_bins[:-1][night]))
|
||||
print(stats.pearsonr(activ_boxes_corr[3], time_bins[:-1][dusk]))
|
||||
|
||||
embed()
|
99
plot_aifl.py
Normal file
99
plot_aifl.py
Normal file
@ -0,0 +1,99 @@
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
from IPython import embed
|
||||
import helper_functions as hf
|
||||
import do_check_for_overlap as cfo
|
||||
from params import *
|
||||
import matplotlib.colors as mcolors
|
||||
import os
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
###################################################################################################################
|
||||
# load data
|
||||
###################################################################################################################
|
||||
# load all the data of one day
|
||||
filename = sorted(os.listdir('../data/'))[2]
|
||||
|
||||
ident = np.load('../../../data_masterthesis/'+filename+'/all_ident_v.npy', allow_pickle=True)
|
||||
freq = np.load('../../../data_masterthesis/'+filename+'/all_fund_v.npy', allow_pickle=True)
|
||||
timeidx = np.load('../../../data_masterthesis/'+filename+'/all_idx_v.npy', allow_pickle=True)
|
||||
t = np.load('../../../data_masterthesis/'+filename+'/all_times.npy', allow_pickle=True)
|
||||
|
||||
aifl = np.load('../data/'+filename+'/aifl2.npy', allow_pickle=True)
|
||||
faifl = np.load('../data/'+filename+'/faifl2.npy', allow_pickle=True)
|
||||
oofl = np.load('../data/'+filename+'/oofl.npy', allow_pickle=True)
|
||||
faifl = np.delete(faifl, [0], axis=0)
|
||||
|
||||
fish_in_aifl = list(np.unique(np.where(~np.isnan(aifl[:, :, 0]))[1]))
|
||||
fish_in_faifl = list(np.unique(faifl[:, [1, 3]]))
|
||||
correct_aifl = sorted(list(set(fish_in_aifl) - set(fish_in_faifl)))
|
||||
|
||||
dt = datetime.datetime.strptime(filename[-5:], '%H_%M')
|
||||
embed()
|
||||
quit()
|
||||
|
||||
###################################################################################################################
|
||||
# plot traces in oofl
|
||||
counter = 0
|
||||
oofl = np.array(oofl)
|
||||
for i in range(len(oofl[:, 0])):
|
||||
channel = int(oofl[i, 0])
|
||||
time_diff = timeidx[channel][ident[channel] == oofl[i][1]][-1] - timeidx[channel][ident[channel] == oofl[i][1]][0]
|
||||
if time_diff >= 0: #4800
|
||||
plt.plot(timeidx[channel][ident[channel] == oofl[i][1]],
|
||||
freq[channel][ident[channel] == oofl[i][1]], Linewidth=2)
|
||||
plt.text(timeidx[channel][ident[channel] == oofl[i][1]][0] + np.random.rand(1) * 0.3,
|
||||
freq[channel][ident[channel] == oofl[i][1]][0] + np.random.rand(1) * 0.3,
|
||||
str(oofl[i][0]) + '_' + str(oofl[i][1]), color='blue')
|
||||
counter = counter + 1
|
||||
plt.show()
|
||||
|
||||
###################################################################################################################
|
||||
# plot overlapping traces
|
||||
new_sorting = cfo.get_list_of_fishN_with_overlap(aifl, fish_in_aifl, timeidx, ident)
|
||||
for fish_number in new_sorting:
|
||||
hf.plot_together(timeidx, freq, ident, aifl, int(fish_number), color_vec[0])
|
||||
|
||||
###################################################################################################################
|
||||
# plot fish in faifl
|
||||
for i in range(len(faifl)):
|
||||
fishid1 = int(faifl[i, 1])
|
||||
fishid2 = int(faifl[i, 3])
|
||||
hf.plot_all_channels(timeidx, freq, ident, aifl, fishid1, fishN2=fishid2)
|
||||
|
||||
###################################################################################################################
|
||||
# plot all traces
|
||||
|
||||
fig, ax = plt.subplots(1, 1, figsize=(15 / inch, 8 / inch))
|
||||
fig.subplots_adjust(left=0.12, bottom=0.15, right=0.98, top=0.98)
|
||||
for color_counter, fish_number in enumerate(fish_in_aifl):
|
||||
for channel_idx in [13]:
|
||||
fish1 = aifl[channel_idx, fish_number, ~np.isnan(aifl[channel_idx, fish_number])]
|
||||
r1 = len(fish1)
|
||||
print(fish1)
|
||||
for len_idx1 in range(r1):
|
||||
zeit = t[timeidx[channel_idx][ident[channel_idx] == fish1[len_idx1]]]
|
||||
plot_zeit = []
|
||||
for i in range(len(zeit)):
|
||||
plot_zeit.append(dt + datetime.timedelta(seconds=zeit[i]))
|
||||
plt.plot(plot_zeit,
|
||||
freq[channel_idx][ident[channel_idx] == fish1[len_idx1]],
|
||||
Linewidth=1, label=fish_number, color=color_vec[color_counter+40])
|
||||
|
||||
ax.set_ylim([450, 1000])
|
||||
ax.set_xlabel('Time', fontsize=fs)
|
||||
ax.set_ylabel('EOD frequency [Hz]', fontsize=fs)
|
||||
ax.make_nice_ax()
|
||||
ax.timeaxis()
|
||||
fig.savefig(save_path_pres+'EOD_sorter.pdf')
|
||||
fig.savefig('../../thesis/Figures/Methods/EOD_sorter.pdf')
|
||||
plt.show()
|
||||
|
||||
###################################################################################################################
|
||||
# plot
|
||||
u = np.unique(faifl[:, [1, 3]])
|
||||
for fish_number in range(len(u)):
|
||||
hf.plot_together(timeidx, freq, ident, aifl, int(u[fish_number]), color_vec[fish_number])
|
||||
|
||||
|
149
plot_direction.py
Normal file
149
plot_direction.py
Normal file
@ -0,0 +1,149 @@
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
import matplotlib.dates as mdates
|
||||
import matplotlib.colors as mcolors
|
||||
import matplotlib.gridspec as gridspec
|
||||
|
||||
from IPython import embed
|
||||
from scipy import stats
|
||||
import os
|
||||
from IPython import embed
|
||||
import helper_functions as hf
|
||||
from params import *
|
||||
import itertools
|
||||
from statisitic_functions import *
|
||||
|
||||
|
||||
def get_recording_number_in_time_bins(time_bins):
|
||||
"""
|
||||
Calculates the number of the recordings in the time bins
|
||||
|
||||
:param time_bins: numpy array with borders of the time bins
|
||||
:return: time_bins_recording: numpy array with the number of recordings to that specific time bin
|
||||
"""
|
||||
# variables
|
||||
time_bins_recordings = np.zeros(len(time_bins) - 1)
|
||||
|
||||
# load data
|
||||
for index, filename_idx in enumerate([0, 1, 2, 3]):
|
||||
filename = sorted(os.listdir('../data/'))[filename_idx]
|
||||
time_points = np.load('../data/' + filename + '/all_hms.npy', allow_pickle=True)
|
||||
|
||||
# in which bins is this recording, fill time_bins_recordings
|
||||
unique_time_points = np.unique(np.hstack(time_points))
|
||||
for idx, tb in enumerate(time_bins[:-1]):
|
||||
if np.any((unique_time_points >= tb) & (unique_time_points <= time_bins[idx + 1])):
|
||||
time_bins_recordings[idx] += 1
|
||||
|
||||
return time_bins_recordings
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
###################################################################################################################
|
||||
# parameter and variables
|
||||
# plot params
|
||||
inch = 2.45
|
||||
save_path = '../../thesis/Figures/Results/'
|
||||
kernel_size = 120
|
||||
c = 0
|
||||
cc = 1
|
||||
all_changes = []
|
||||
|
||||
all_first = []
|
||||
all_last = []
|
||||
|
||||
# time_bins 5 min
|
||||
time_factor = 60 * 60
|
||||
time_bins = np.arange(0, 24 * time_factor + 1, bin_len)
|
||||
|
||||
# changes per bin of 5min for all fish
|
||||
cbf = np.full([3, len(time_bins) - 1, 300], np.nan)
|
||||
cbf_counter = 0
|
||||
|
||||
# kernel
|
||||
kernel = np.ones(kernel_size) / kernel_size
|
||||
|
||||
###################################################################################################################
|
||||
# load data
|
||||
###################################################################################################################
|
||||
# load all the data of one day
|
||||
cbf = np.load('../data/cbf5.npy', allow_pickle=True)
|
||||
# embed()
|
||||
# quit()
|
||||
N_rec_time_bins = get_recording_number_in_time_bins(time_bins)
|
||||
|
||||
###################################################################################################################
|
||||
# direction and act plot
|
||||
no = np.full(len(time_bins) - 1, np.nan)
|
||||
down = np.full(len(time_bins) - 1, np.nan)
|
||||
up = np.full(len(time_bins) - 1, np.nan)
|
||||
|
||||
for i in range(len(up)):
|
||||
up[i] = np.nansum(cbf[1, i]) # * (60/bin_len)
|
||||
down[i] = np.nansum(cbf[0, i]) # * (60/bin_len)
|
||||
no[i] = np.nansum(cbf[2, i]) # * (60/bin_len)
|
||||
conv_direct = np.convolve(up - down, kernel, 'same')
|
||||
conv_up = np.convolve(up, kernel, 'same')
|
||||
conv_down = np.convolve(down, kernel, 'same')
|
||||
conv_N_rec_tb = np.convolve(N_rec_time_bins, kernel, 'same')
|
||||
|
||||
# rolled time axis for nicer plot midnight in the middle start noon
|
||||
rolled_time = np.roll(time_bins[:-1] / time_factor, int(len(time_bins[:-1]) / 2))
|
||||
rolled_up = np.roll(up / N_rec_time_bins, int(len(time_bins[:-1]) / 2))
|
||||
rolled_down = np.roll(down * -1 / N_rec_time_bins, int(len(time_bins[:-1]) / 2))
|
||||
rolled_conv_dir = np.roll(conv_direct / conv_N_rec_tb, int(len(time_bins[:-1]) / 2))
|
||||
rolled_conv_up = np.roll(conv_up / conv_N_rec_tb, int(len(time_bins[:-1]) / 2))
|
||||
rolled_conv_down = np.roll(conv_down * -1 / conv_N_rec_tb, int(len(time_bins[:-1]) / 2))
|
||||
###################################################################################################################
|
||||
# time zones
|
||||
time_edges = np.array([4.5, 6.5, 16.5, 18.5]) * time_factor
|
||||
day = (time_bins[:-1] >= time_edges[1]) & (time_bins[:-1] <= time_edges[2])
|
||||
dusk = (time_bins[:-1] >= time_edges[2]) & (time_bins[:-1] <= time_edges[3])
|
||||
night = (time_bins[:-1] <= time_edges[0]) | (time_bins[:-1] >= time_edges[3])
|
||||
dawn = (time_bins[:-1] >= time_edges[0]) & (time_bins[:-1] <= time_edges[1])
|
||||
|
||||
###################################################################################################################
|
||||
# activity up down over time
|
||||
fig2, ax2 = plt.subplots(1, 1, figsize=(15 / inch, 8 / inch))
|
||||
fig2.subplots_adjust(left=0.1, bottom=0.15, right=0.95, top=0.98)
|
||||
|
||||
ax2.plot(rolled_up, color=color2[2])
|
||||
ax2.plot(rolled_down, color=color2[3])
|
||||
ax2.plot(rolled_conv_dir, 'k', lw=3)
|
||||
ax2.plot(rolled_conv_up, color=color2[0], lw=3, label='upstream')
|
||||
ax2.plot(rolled_conv_down, color=color2[1], lw=3, label='downstream')
|
||||
|
||||
ax2.plot([16.5*time_factor/5, 6.5*time_factor/bin_len], [5.5, 5.5], color=color_diffdays[0], lw=7)
|
||||
ax2.plot([16.5*time_factor/5, 18.5*time_factor/bin_len], [5.5, 5.5], color=color_diffdays[3], lw=7)
|
||||
ax2.plot([4.5*time_factor/5, 6.5*time_factor/bin_len], [5.5, 5.5], color=color_diffdays[3], lw=7)
|
||||
|
||||
ax2.set_xlim([0, 24 * time_factor / bin_len])
|
||||
ax2.set_xticks(np.arange(0, 25, 3) * time_factor / bin_len)
|
||||
ax2.set_xticklabels(['12:00', '15:00', '18:00', '21:00', '00:00', '03:00', '06:00', '09:00', '12:00'])
|
||||
ax2.make_nice_ax()
|
||||
|
||||
# ax2.set_yticks([-7., -5., -2.5, 0, 2.5, 5., 7.])
|
||||
ax2.set_xlabel('Time', fontsize=fs)
|
||||
ax2.set_ylabel('Activity [Changes/ ' + str(bin_len) + ' s]', fontsize=fs)
|
||||
plt.legend()
|
||||
|
||||
# fig2.savefig(save_path+'activ_updown_time.png')
|
||||
fig2.savefig(save_path + 'activ_updown_time.pdf')
|
||||
fig2.savefig(save_path_pres + 'activ_updown_time.pdf')
|
||||
plt.show()
|
||||
|
||||
###################################################################################################################
|
||||
# statistics
|
||||
|
||||
# print('night down: ', np.nanmedian(conv_down[night]/conv_N_rec_tb[night]))
|
||||
# print('day down: ', np.nanmedian(conv_down[day]/conv_N_rec_tb[day]))
|
||||
|
||||
print('night', stats.pearsonr(conv_down[night]/conv_N_rec_tb[night], conv_up[night]/conv_N_rec_tb[night]))
|
||||
print('day', stats.pearsonr(conv_down[day]/conv_N_rec_tb[day], conv_up[day]/conv_N_rec_tb[day]))
|
||||
print('dusk', stats.pearsonr(conv_down[dusk]/conv_N_rec_tb[dusk], conv_up[dusk]/conv_N_rec_tb[dusk]))
|
||||
print('dawn', stats.pearsonr(conv_down[dawn]/conv_N_rec_tb[dawn], conv_up[dawn]/conv_N_rec_tb[dawn]))
|
||||
# print('night up: ', np.nanmedian(conv_up[night]/conv_N_rec_tb[night]))
|
||||
# print('day up: ', np.nanmedian(conv_up[day]/conv_N_rec_tb[day]))
|
||||
|
||||
embed()
|
||||
quit()
|
Loading…
Reference in New Issue
Block a user