diff --git a/processes/align.py b/old_data_analysis/align.py similarity index 100% rename from processes/align.py rename to old_data_analysis/align.py diff --git a/processes/autoreg.py b/old_data_analysis/autoreg.py similarity index 100% rename from processes/autoreg.py rename to old_data_analysis/autoreg.py diff --git a/processes/crosscorr.py b/old_data_analysis/crosscorr.py similarity index 100% rename from processes/crosscorr.py rename to old_data_analysis/crosscorr.py diff --git a/processes/fft.py b/old_data_analysis/fft.py similarity index 100% rename from processes/fft.py rename to old_data_analysis/fft.py diff --git a/processes/fft_function.py b/old_data_analysis/fft_function.py similarity index 100% rename from processes/fft_function.py rename to old_data_analysis/fft_function.py diff --git a/processes/findpeaks.py b/old_data_analysis/findpeaks.py similarity index 100% rename from processes/findpeaks.py rename to old_data_analysis/findpeaks.py diff --git a/processes/standardscaler.py b/old_data_analysis/standardscaler.py similarity index 100% rename from processes/standardscaler.py rename to old_data_analysis/standardscaler.py diff --git a/routines/__init__.py b/old_plotting/__init__.py similarity index 100% rename from routines/__init__.py rename to old_plotting/__init__.py diff --git a/routines/boxplot.py b/old_plotting/boxplot.py similarity index 100% rename from routines/boxplot.py rename to old_plotting/boxplot.py diff --git a/routines/heatmap.py b/old_plotting/heatmap.py similarity index 100% rename from routines/heatmap.py rename to old_plotting/heatmap.py diff --git a/routines/histogram.py b/old_plotting/histogram.py similarity index 100% rename from routines/histogram.py rename to old_plotting/histogram.py diff --git a/routines/mean_plot.py b/old_plotting/mean_plot.py similarity index 100% rename from routines/mean_plot.py rename to old_plotting/mean_plot.py diff --git a/routines/median_plot.py b/old_plotting/median_plot.py similarity index 100% rename from routines/median_plot.py rename to old_plotting/median_plot.py diff --git a/routines/plot_utils.py b/old_plotting/plot_utils.py similarity index 100% rename from routines/plot_utils.py rename to old_plotting/plot_utils.py diff --git a/routines/plottingabc.py b/old_plotting/plottingabc.py similarity index 100% rename from routines/plottingabc.py rename to old_plotting/plottingabc.py diff --git a/routines/single_birth_plot.py b/old_plotting/single_birth_plot.py similarity index 100% rename from routines/single_birth_plot.py rename to old_plotting/single_birth_plot.py diff --git a/routines/single_plot.py b/old_plotting/single_plot.py similarity index 100% rename from routines/single_plot.py rename to old_plotting/single_plot.py diff --git a/plotting.py b/plotting.py index db2a7d7313a54f71893bebcd4ecb3e42ebc88202..a229e308a8e8181c466002974e66e5f6dd35fd55 100644 --- a/plotting.py +++ b/plotting.py @@ -4,6 +4,7 @@ import matplotlib.cm import matplotlib.pylab as plt import numpy as np import numpy.matlib +from butterfilter import butterfilter def kymograph( @@ -536,6 +537,8 @@ def bud_to_bud_plot( nbins=None, return_signal=False, df=None, + title=None, + filter=False, ): """ Plot the median and percentiles of a signal between consecutive buddings. @@ -565,6 +568,10 @@ def bud_to_bud_plot( bins. df: pd.DataFrame, optional If passed, use this data rather than dataloader's. + title: str, optional + Title for plot. + filter: boolean + If True, apply a butter filter to each time series. Example ------- @@ -577,6 +584,8 @@ def bud_to_bud_plot( else: t, signal_data = dl.get_time_series(signal, group=group, df=df) t, buddings = dl.get_time_series("buddings", group=group, df=df) + if filter: + signal_data = butterfilter(signal_data) if np.max(t) > 48: # convert to hours t = t / 60 @@ -590,43 +599,47 @@ def bud_to_bud_plot( past_buddings = np.nonzero(buddings[i, :][:tpt_i])[0] if np.any(past_buddings): start_tpt_i = past_buddings[-1] - local_signals.append( - signal_data[i, start_tpt_i : end_tpt_i + 1] - ) - local_times.append(t[start_tpt_i : end_tpt_i + 1]) - # find bins for normalised time, between 0 and 1 - nbins = int(np.median([len(local_time) for local_time in local_times])) - ntbins = np.linspace(0, 1, nbins) - # interpolate each local signal to make a new signal - new_signal = np.nan * np.ones((len(local_signals), nbins)) - for i in range(len(local_signals)): - s = local_signals[i] - # normalise time between 0 and 1 - nt = local_times[i] - local_times[i][0] - nt /= nt[-1] - # interpolate into the bins - new_signal[i, :] = np.interp( - ntbins, - nt[~np.isnan(s)], - s[~np.isnan(s)], - left=np.nan, - right=np.nan, - ) - # plot median and percentiles - plt.figure() - plt.plot(ntbins, np.nanmedian(new_signal, axis=0), f"{colour}.-") - for lower, upper in zip([45, 40, 35], [55, 60, 65]): - plt.fill_between( - ntbins, - np.nanpercentile(new_signal, lower, axis=0), - np.nanpercentile(new_signal, upper, axis=0), - alpha=0.06, - color=colour, - ) - plt.xlabel("position between budding events") - plt.ylabel(signal.replace("_", " ")) - plt.grid() - plt.title(f"{dl.dataname}: t={tpt}") - plt.show(block=False) - if return_signal: - return new_signal + local_data = signal_data[i, start_tpt_i : end_tpt_i + 1] + if ~np.all(np.isnan(local_data)): + local_signals.append(local_data) + local_times.append(t[start_tpt_i : end_tpt_i + 1]) + if local_times: + # find bins for normalised time, between 0 and 1 + nbins = int(np.median([len(local_time) for local_time in local_times])) + ntbins = np.linspace(0, 1, nbins) + # interpolate each local signal to make a new signal + new_signal = np.nan * np.ones((len(local_signals), nbins)) + for i in range(len(local_signals)): + s = local_signals[i] + # normalise time between 0 and 1 + nt = local_times[i] - local_times[i][0] + nt /= nt[-1] + # interpolate into the bins + new_signal[i, :] = np.interp( + ntbins, + nt[~np.isnan(s)], + s[~np.isnan(s)], + left=np.nan, + right=np.nan, + ) + # plot median and percentiles + plt.figure() + plt.plot(ntbins, np.nanmedian(new_signal, axis=0), f"{colour}.-") + for lower, upper in zip([45, 40, 35], [55, 60, 65]): + plt.fill_between( + ntbins, + np.nanpercentile(new_signal, lower, axis=0), + np.nanpercentile(new_signal, upper, axis=0), + alpha=0.06, + color=colour, + ) + plt.xlabel("position between budding events") + plt.ylabel(signal.replace("_", " ")) + plt.grid() + if title is None: + plt.title(f"{dl.dataname}: t={tpt}") + else: + plt.title(title) + plt.show(block=False) + if return_signal: + return new_signal