diff --git a/examples/plot_kymograph.py b/examples/plot_kymograph.py index 0a314065a14734b3c618989691c84f0b940d9d90..e32cb7d89bd5f6476724d2368973a4f8da115310 100644 --- a/examples/plot_kymograph.py +++ b/examples/plot_kymograph.py @@ -1,25 +1,42 @@ import matplotlib.cm +import numpy as np from wela.figs2pdf import figs2pdf -from wela.dataloader import dataloader, sort_df +from wela.dataloader import dataloader +from wela.sorting import sort_by_maximum + from wela.plotting import kymograph, plot_lineage -datasets = ["Pdr5_3_11_22", "Pdr5_flc_10ugml_1676"] +datasets = ["Pdr5_3_11_22"] for dataname in datasets: + # load data dl = dataloader(".", "/Users/pswain/wip/tsv_data/pdr_with_gr/") - dl.load(dataname, use_tsv=True) - sdf = sort_df(dl.df, "median_GFP") - + dl.load(dataname, use_tsv=True, hours=False) + dl.df.time = dl.df.time / 60 title = dataname.split(".")[0] - kymograph(sdf, hue="buddings", title=title) - kymograph(sdf, hue="median_GFP", title=title) + # although only one group for this data + groups = dl.df.group.unique() + # standard kymographs + kymograph(dl.df, hue="buddings", title=title) + kymograph(dl.df, hue="median_GFP", title=title, buddings=True) kymograph( - sdf, + dl.df, hue="bud_growth_rate", title=title, vmin=-50, vmax=50, cmap=matplotlib.cm.Spectral, ) + # sorted kymograph + t, data = dl.get_time_series("median_GFP", group=groups[0]) + sort_order = sort_by_maximum(data[:, t < 5], np.nanmean) + kymograph( + dl.df, + "median_GFP", + group=groups[0], + buddings=True, + sort_order=sort_order, + title=title, + ) if False: diff --git a/src/wela/sorting.py b/src/wela/sorting.py index 11694aacf67d2c927fc38528c6c68e0bfd1ad275..a44a7def5ddef3ac5e2e5422eeb4173c737a7766 100644 --- a/src/wela/sorting.py +++ b/src/wela/sorting.py @@ -4,14 +4,16 @@ import numpy as np def sort_by_budding(buddings, bud_number=0): """Return indices for each cell when a particular budding occurs.""" bud_indices = np.transpose(np.nonzero(buddings)) - sort_order = [] + particular_bud_indices = [] for cell_i in range(buddings.shape[0]): + # find particular bud for this cell cell_buds = bud_indices[bud_indices[:, 0] == cell_i, :] if bud_number < cell_buds.shape[0]: - sort_order.append(cell_buds[bud_number][1]) + particular_bud_indices.append(cell_buds[bud_number][1]) else: - sort_order.append(np.nan) - sort_order = np.argsort(sort_order) + particular_bud_indices.append(np.nan) + # arrange by earliest bud + sort_order = np.argsort(particular_bud_indices) return sort_order