Commit 82d74da7 by Jigyasa Watwani

mean long axis with error bars

parent ba6347de
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="white")
# Number of samples in this clutch
N1 = 10
N2 = 11
N3 = 4
########## Load the data ###########################################################
l_clutch2 = np.zeros(N2, dtype=object)
time2 = np.zeros(N2, dtype=object) #
for j in range(N1, N2+N1):
l_clutch2[j-N1-1] = np.load('long_axis_xy_coordinates_movie' + str(j) + '.npy')
time2[j-N1-1] = np.load('time_xy_coordinates_movie' + str(j) + '.npy')
#NOTE: Clutch1 is movie 1-10
l_clutch1 = np.zeros(N1, dtype=object) #l[i] is the long axis for movie i
time1 = np.zeros(N1, dtype=object) #time[i] is the time for movie i
for i in range(1, N1+1):
l_clutch1[i-1] = np.load('long_axis_xy_coordinates_movie' + str(i) + '.npy')
time1[i-1] = np.load('time_xy_coordinates_movie' + str(i) + '.npy')
#NOTE: Clutch2 is movie 11-21
l_clutch2 = np.zeros(N2, dtype=object)
time2 = np.zeros(N2, dtype=object) #
for j in range(N1, N2+N1):
l_clutch2[j-N1-1] = np.load('long_axis_xy_coordinates_movie' + str(j) + '.npy')
time2[j-N1-1] = np.load('time_xy_coordinates_movie' + str(j) + '.npy')
#NOTE: Clutch3 is movie 22, 23, 25, 26
l_clutch3 = np.zeros(N3, dtype=object)
time3 = np.zeros(N3, dtype=object)
l_clutch3[0] = np.load('long_axis_xy_coordinates_movie22.npy')
time3[0] = np.load('time_xy_coordinates_movie22.npy')
l_clutch3[1] = np.load('long_axis_xy_coordinates_movie23.npy')
time3[1] = np.load('time_xy_coordinates_movie23.npy')
l_clutch3[2] = np.load('long_axis_xy_coordinates_movie25.npy')
time3[2] = np.load('time_xy_coordinates_movie25.npy')
l_clutch3[3] = np.load('long_axis_xy_coordinates_movie26.npy')
time3[3] = np.load('time_xy_coordinates_movie26.npy')
######### make all arrays the same length ##########################
min_length1 = min([len(x) for x in l_clutch1])
for i in range(N1):
l_clutch1[i] = l_clutch1[i][:min_length1]
time1[i] = time1[i][:min_length1]
min_length2 = min([len(x) for x in l_clutch2])
for i in range(N2):
l_clutch2[i] = l_clutch2[i][:min_length2]
time2[i] = time2[i][:min_length2]
min_length3 = min([len(x) for x in l_clutch3])
for i in range(N3):
l_clutch3[i] = l_clutch3[i][:min_length3]
time3[i] = time3[i][:min_length3]
# All time arrays are the same. Randomly choose one to use as the time array
time1 = time1[0]
time2 = time2[0]
time3 = time3[0]
######### Plot the average over each clutch ############################
avg_l1 = np.mean(l_clutch1, axis=0)
std_l1 = np.std(l_clutch1, axis=0)
avg_l2 = np.mean(l_clutch2, axis=0)
std_l2 = np.std(l_clutch2, axis=0)
avg_l3 = np.mean(l_clutch3, axis=0)
std_l3 = np.std(l_clutch3, axis=0)
plt.plot(time1, avg_l1, linewidth=2, color='#e07a5f', label='Clutch 1')
plt.fill_between(time1, avg_l1-std_l1, avg_l1+std_l1, alpha=0.1, color='#e07a5f')
plt.plot(time2, avg_l2, linewidth=2, color='#3d405b', label='Clutch 2')
plt.fill_between(time2, avg_l2-std_l2, avg_l2+std_l2, alpha=0.1, color='#3d405b')
plt.plot(time3, avg_l3, linewidth=2, color='#81b29a', label='Clutch 3')
plt.fill_between(time3, avg_l3-std_l3, avg_l3+std_l3, alpha=0.1, color='#81b29a')
plt.xlabel('Time (min)')
plt.ylabel('Long axis ($\mu m$)')
plt.legend()
plt.savefig('Average_over_each_clutch.pdf')
######## Average over 3 clutches #####
min_length = min([len(avg_l1), len(avg_l2)])
avg_l1 = avg_l1[:min_length]
avg_l2 = avg_l2[:min_length]
std_l1 = std_l1[:min_length]
std_l2 = std_l2[:min_length]
avg_over_clutches = np.mean(np.array([avg_l1, avg_l2]), axis=0)
std_over_clutches = np.std(np.array([avg_l1, avg_l2]), axis=0)
fig, ax = plt.subplots()
ax.plot(time1[:min_length], avg_over_clutches, linewidth=2, color='black')
ax.fill_between(time1[:min_length], avg_over_clutches-std_over_clutches, avg_over_clutches+std_over_clutches, alpha=0.1, color='black')
ax.set_xlabel('Time (min)')
ax.set_ylabel('Long axis ($\mu m$)')
fig.savefig('Average_over_all_clutches.pdf')
...@@ -3,6 +3,9 @@ import matplotlib.pyplot as plt ...@@ -3,6 +3,9 @@ import matplotlib.pyplot as plt
import pandas as pd import pandas as pd
from matplotlib.widgets import Slider from matplotlib.widgets import Slider
from scipy.spatial import ConvexHull from scipy.spatial import ConvexHull
from matplotlib.animation import FuncAnimation
import os
from tempfile import TemporaryDirectory
def perimeter_area_majoraxis(X, Y): def perimeter_area_majoraxis(X, Y):
...@@ -35,8 +38,8 @@ def perimeter_area_majoraxis(X, Y): ...@@ -35,8 +38,8 @@ def perimeter_area_majoraxis(X, Y):
# hull = ConvexHull(points) # hull = ConvexHull(points)
# print(perimeter_area_majoraxis(x, y)) # print(perimeter_area_majoraxis(x, y))
# raise SystemExit # raise SystemExit
filename = 'xy_coordinates_movie1.txt'
file = np.loadtxt('xy_coordinates_movie1.txt') file = np.loadtxt(filename)
number_of_pixels = file.shape[0] number_of_pixels = file.shape[0]
time_points = file.shape[1] time_points = file.shape[1]
time_array = np.arange(0, 5*int(time_points/2), 5) time_array = np.arange(0, 5*int(time_points/2), 5)
...@@ -58,6 +61,10 @@ y = np.array(y.interpolate(method='linear', axis=0, limit_direction='both')) ...@@ -58,6 +61,10 @@ y = np.array(y.interpolate(method='linear', axis=0, limit_direction='both'))
x = x.T x = x.T
y = y.T y = y.T
# NOTE: This is only for movie11 -- remaining NANs
# x=x[1:]
# y=y[1:]
# make movie of the contours and convex hull # make movie of the contours and convex hull
fig, ax = plt.subplots(1, 1, sharex=True, figsize=(8,8)) fig, ax = plt.subplots(1, 1, sharex=True, figsize=(8,8))
ax.set_xlabel(r'$x$') ax.set_xlabel(r'$x$')
...@@ -66,9 +73,9 @@ ax.set_ylim(np.min(y), np.max(y)) ...@@ -66,9 +73,9 @@ ax.set_ylim(np.min(y), np.max(y))
ax.set_ylabel(r'$y$') ax.set_ylabel(r'$y$')
outlineplot, = ax.plot(x[0], y[0], marker = '.', linestyle='None') outlineplot, = ax.plot(x[0], y[0], marker = '.', color='darkgoldenrod', linestyle='None')
hull = perimeter_area_majoraxis(x[0], y[0])[-1] hull = perimeter_area_majoraxis(x[0], y[0])[-1]
hull_lines = [ax.plot(x[0][simplex], y[0][simplex], 'r-')[0] for simplex in hull.simplices] hull_lines = [ax.plot(x[0][simplex], y[0][simplex], '-', color='black')[0] for simplex in hull.simplices]
def update(value): def update(value):
ti = np.abs(time_array - value).argmin() ti = np.abs(time_array - value).argmin()
...@@ -83,7 +90,7 @@ def update(value): ...@@ -83,7 +90,7 @@ def update(value):
line.remove() line.remove()
hull = perimeter_area_majoraxis(x[ti], y[ti])[-1] hull = perimeter_area_majoraxis(x[ti], y[ti])[-1]
update.hull_lines = [ax.plot(x[ti][simplex], y[ti][simplex], 'r-')[0] for simplex in hull.simplices] update.hull_lines = [ax.plot(x[ti][simplex], y[ti][simplex], '-', color='black')[0] for simplex in hull.simplices]
plt.draw() plt.draw()
sax = plt.axes([0.1, 0.92, 0.7, 0.02]) sax = plt.axes([0.1, 0.92, 0.7, 0.02])
...@@ -92,30 +99,58 @@ slider = Slider(sax, r'$t/\tau$', min(time_array), max(time_array), ...@@ -92,30 +99,58 @@ slider = Slider(sax, r'$t/\tau$', min(time_array), max(time_array),
fc='#999999') fc='#999999')
slider.drawon = False slider.drawon = False
slider.on_changed(update) slider.on_changed(update)
plt.show() plt.show()
# save movie
print('Saving movie for the contour and hull..')
FPS = 20
fps = float(FPS)
command = "ffmpeg -y -r"
options = "-b:v 3600k -qscale:v 4 -vcodec mpeg4"
tmp_dir = TemporaryDirectory()
get_filename = lambda x: os.path.join(tmp_dir.name, x)
for tt in range(len(time_array)):
slider.set_val(time_array[tt])
fr = get_filename("%03d.png" % tt)
fig.savefig(fr, facecolor=fig.get_facecolor(), dpi=100)
os.system(command + " " + str(fps)
+ " -i " + tmp_dir.name + os.sep
+ "%03d.png " + options + " " + 'convex_hull_contour.mp4')
tmp_dir.cleanup()
# find the perimeter and area # find the perimeter and area
#NOTE: For movie 11, time_array_mov11 = time_array[1:] and reduce the length of the following arrays by 1
perimeter_array = np.zeros(int(time_points/2)) perimeter_array = np.zeros(int(time_points/2))
area_array = np.zeros(int(time_points/2)) area_array = np.zeros(int(time_points/2))
long_axis_array = np.zeros(int(time_points/2)) long_axis_array = np.zeros(int(time_points/2))
for k in range(0, int(time_points/2)): for k in range(0, int(time_points/2)):
perimeter_array[k], area_array[k], long_axis_array[k], _ = perimeter_area_majoraxis(x[k], y[k]) perimeter_array[k], area_array[k], long_axis_array[k], _ = perimeter_area_majoraxis(x[k], y[k])
np.save('long_axis_%s.npy' %filename, long_axis_array)
np.save('time_%s.npy' %filename, time_array)
plt.plot(time_array, perimeter_array, marker='o', linestyle='None') plt.plot(time_array, perimeter_array, marker='o', linestyle='None')
plt.xlabel('Time (min)') plt.xlabel('Time (min)')
plt.ylabel('Perimeter of the convex hull ($\mu m$)') plt.ylabel('Perimeter of the convex hull ($\mu m$)')
plt.show() plt.show()
plt.plot(time_array, long_axis_array, marker='o', linestyle='None') plt.plot(time_array, long_axis_array, marker='o', linestyle='None')
plt.xlabel('Time (min)') plt.xlabel('Time (min)')
plt.ylabel('Long axis of the convex hull ($\mu m$)') plt.ylabel('Long axis of the convex hull ($\mu m$)')
coefficients = np.polyfit(time_array[25:-13], long_axis_array[25:-13], 1)
polyomial = np.poly1d(coefficients) # coefficients = np.polyfit(time_array[25:-13], long_axis_array[25:-13], 1)
xline = time_array[25:-13] # polyomial = np.poly1d(coefficients)
yline = polyomial(xline) # xline = time_array[25:-13]
plt.plot(xline, yline) # yline = polyomial(xline)
print(coefficients[0]) # plt.plot(xline, yline)
# print(coefficients[0])
plt.show() plt.show()
plt.plot(time_array, area_array, marker='o', linestyle='None') plt.plot(time_array, area_array, marker='o', linestyle='None')
plt.xlabel('Time (min)') plt.xlabel('Time (min)')
plt.ylabel('Area of the convex hull ($\mu m^2$)') plt.ylabel('Area of the convex hull ($\mu m^2$)')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment