line_tracking_of_fish_movement/plot_location.py

152 lines
6.2 KiB
Python

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 *
if __name__ == '__main__':
###################################################################################################################
# parameter and variables
# plot params
inch = 2.45
save_path = '../../thesis/Figures/Results/'
# lists
afx = [] # all_flat_x
###################################################################################################################
# load data
for filename_idx in [0, 1, 2, 3]:
filename = sorted(os.listdir('../data/'))[filename_idx]
all_xticks = np.load('../data/' + filename + '/all_xtickses.npy', allow_pickle=True)
# lists
afx.extend(np.unique(np.hstack(all_xticks)))
afx = sorted(np.unique(afx))
c = 0
###################################################################################################################
# make alm: all location matrix
alm = np.full([len(afx), 16], 0)
for filename_idx in [0, 1, 2, 3]:
filename = sorted(os.listdir('../data/'))[filename_idx]
all_max_ch_means = np.load('../data/' + filename + '/all_max_ch.npy', allow_pickle=True)
all_xticks = np.load('../data/' + filename + '/all_xtickses.npy', allow_pickle=True)
power_means = np.load('../data/' + filename + '/power_means.npy', allow_pickle=True)
names = np.load('../data/' + filename + '/fish_species.npy', allow_pickle=True)
for fish_number in range(len(power_means)):
if power_means[fish_number] >= -90 and names[fish_number] != 'unknown':
c += 1
x_tickses = all_xticks[fish_number]
max_ch_mean = all_max_ch_means[fish_number]
alm[np.flatnonzero(np.isin(afx, x_tickses)), max_ch_mean] += 1
hist = np.sum(alm, axis=0)/len(alm)
# hist = np.mean(alm, axis=0) #/len(alm)
# hist_err = np.std(alm, axis=0) #/len(alm)
###################################################################################################################
# figure
# fig1, [ax1, ax11] = plt.subplots(1, 2, figsize=(16 / inch, 10 / inch))
# fig1.subplots_adjust(left=0.12, bottom=0.15, right=0.99, top=0.99, wspace=0.0)
fig1 = plt.figure(figsize=[13 / inch, 10 / inch])
spec = gridspec.GridSpec(ncols=2, nrows=1, figure=fig1, hspace=0.5, wspace=0.05,
width_ratios=[7,1], left=0.12, bottom=0.15, right=0.99, top=0.95)
ax1 = fig1.add_subplot(spec[0, 0])
ax11 = fig1.add_subplot(spec[0, 1])
###################################################################################################################
# plot
ax1.imshow(alm[::20].T[::-1], vmin=0.0, vmax=7.0, aspect='auto', interpolation='gaussian',
extent=[afx[0], afx[-1], -0.5, 15.5])
ax1.beautimechannelaxis()
ax1.timeaxis()
# fig1.autofmt_xdate()
ax11.barh(np.arange(0,16), hist, color=color2[4])
# ax11.barh(np.arange(0,16), hist, color=color2[4], xerr=hist_err)
ax11.make_nice_ax()
ax11.set_ylim(-0.5,15.5)
ax11.set_yticks([])
ax11.set_xticks([])
ax11.invert_yaxis()
fig1.savefig(save_path+'all_trajectories.pdf')
x = np.array(afx)
x1 = np.where((x>=datetime_box[0])&(x<=datetime_box[2]))[0]
x2 = np.where((x>=datetime_box[4])&(x<=datetime_box[5]))[0]
y = np.concatenate((alm[x1],alm[x2]))
y_a=np.sum(y, axis=0)/len(y)
x3 = np.where((x>=datetime_box[2])&(x<=datetime_box[4]))[0]
y_b = np.sum(alm[x3], axis=0)/len(alm[x3])
fig2 = plt.figure(figsize=[13 / inch, 10 / inch])
spec = gridspec.GridSpec(ncols=2, nrows=1, figure=fig2, hspace=0.5, wspace=0.05,
width_ratios=[1, 1], left=0.12, bottom=0.15, right=0.99, top=0.95)
ax2 = fig2.add_subplot(spec[0, 0])
ax22 = fig2.add_subplot(spec[0, 1])
###################################################################################################################
# plot
ax2.barh(np.arange(1, 17), y_a, color=color2[4])
ax22.barh(np.arange(1, 17), y_b, color=color2[4])
for ax in [ax2, ax22]:
ax.make_nice_ax()
ax.set_ylim(-0.5, 15.5)
ax.set_ylim(0, 6.0)
# ax.set_xticks([])
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', '', 'g', '', '10', '', '12', '', '14', '', '16'], fontsize=9)
ax.invert_yaxis()
ax22.set_yticklabels([])
plt.show()
embed()
quit()
###################################################################################################################
# figure 2: each day on its own
# for filename_idx in [1, 4, 6]:
# filename = sorted(os.listdir('../../../data/'))[filename_idx]
# all_max_ch_means = np.load('../data/' + filename + '/all_max_ch.npy', allow_pickle=True)
# all_xticks = np.load('../data/' + filename + '/all_xtickses.npy', allow_pickle=True)
# power_means = np.load('../data/' + filename + '/power_means.npy', allow_pickle=True)
#
# # lists
# flat_x = np.unique(np.hstack(all_xticks))
# afx.extend(flat_x)
# location_matrix = np.full([len(flat_x), 16], 0)
#
# for fish_number in range(len(power_means)):
# # if power_means[fish_number] >= -65:
# x_tickses = all_xticks[fish_number]
# max_ch_mean = all_max_ch_means[fish_number]
#
# location_matrix[np.flatnonzero(np.isin(flat_x, x_tickses)), max_ch_mean] += 1
#
# fig2 = plt.figure(figsize=[16 / inch, 12 / inch])
# spec = gridspec.GridSpec(ncols=1, nrows=1, figure=fig2, hspace=0.5, wspace=0.5)
# ax2 = fig2.add_subplot(spec[0, 0])
#
# ax2.imshow(location_matrix[::20].T[::-1], aspect='auto', interpolation='gaussian', cmap='jet',
# extent=[flat_x[0], flat_x[-1], 0, 15])
# ax2.beautimechannelaxis()
# ax2.timeaxis()
# fig2.autofmt_xdate()
#
# plt.show()
# embed()