Source code for src.plot.motif_production_rates

import matplotlib.pyplot as plt
from matplotlib import colors
import numpy as np

[docs] def motif_production_rates( motif_production_rates, letters : list[str], plotpath : str = None, plotformats : str = ['.pdf','.pgf'], plot_parameters : list = [{ 'color' : 'b', 'alpha' : 0.3, 'label' : 'Strand', }], ax = plt ): ax.imshow(motif_production_rates) cw = compute_words(letters,zeros=(1,0,0,1)) # motif_production_rates = sort_by_length(np.array(motif_production_rates)) # cw = sort_by_length(cw) ax.xticks(ticks=np.arange(0,len(cw.reshape(-1))), labels=cw.reshape(-1), fontsize='x-small', rotation=90) ax.yticks(ticks=np.arange(0,len(cw.reshape(-1))), labels=cw.reshape(-1), fontsize='x-small') if plotpath is not None: for plotformat in plotformats: plt.savefig(plotpath+'motif_production_rates'+plotformat)
#plot_rate_constants(motif_production_rates, 'Motif Production Rates', plotpath+'motif_production_rates.pdf')
[docs] def sort_by_length(x): shape = x.shape shape1 = shape[len(shape)//2:] shape2 = shape[:len(shape)//2] if shape1==shape2: if shape[1]==shape[0]: x = x[:,1:,1:,:,:,1:,1:,:] shape = x.shape shape1 = shape[len(shape)//2:] shape2 = shape[:len(shape)//2] dimers1 = x[0,:,:,0].reshape((-1,)+shape2) starts1 = x[0,:,:,1:].reshape((-1,)+shape2) continuations1 = x[1:,:,:,1:].reshape((-1,)+shape2) ends1 = x[1:,:,:,0].reshape((-1,)+shape2) rtrn = np.concatenate((dimers1, starts1, continuations1, ends1)) dimers = rtrn[:,0,:,:,0].reshape((np.prod(shape1),-1)) starts = rtrn[:,0,:,:,1:].reshape((np.prod(shape1),-1)) continuations = rtrn[:,1:,:,:,1:].reshape((np.prod(shape1),-1)) ends = rtrn[:,1:,:,:,0].reshape((np.prod(shape1),-1)) rtrn = np.concatenate((dimers,starts,continuations,ends),axis=1) else: if shape[1]==shape[0]: x = x[:,1:,1:,:] dimers1 = x[0,:,:,0].reshape(-1) starts1 = x[0,:,:,1:].reshape(-1) continuations1 = x[1:,:,:,1:].reshape(-1) ends1 = x[1:,:,:,0].reshape(-1) rtrn = np.concatenate((dimers1, starts1, continuations1, ends1)) return rtrn
[docs] def compute_words(letters,zeros=(1,0,0,1)): zeros = np.asarray(zeros) nol = len(letters) shape = np.asarray((nol,)*len(zeros)) shape = tuple(shape+zeros) ne = np.empty(shape, dtype=object) if zeros[0]: ne[0] = '0' for ii in range(nol): ne[ii+zeros[0]] = letters[ii] for jj in range(1,len(shape)): ne = np.swapaxes(ne,jj,0) if zeros[jj]: ne[0] += '0' for ii in range(nol): ne[ii+zeros[jj]] += letters[ii] ne = np.swapaxes(ne,jj,0) return ne
''' def plot_rate_constants(rate_constants, title, figname, colorbar_norm = colors.LogNorm(), c_ref = trj.parameters['c_ref'], ticks = mean_ticks, ): fig_dct = { 'legend' : False, 'title' : title, 'xlabel' : create_axis_label('template (complement)'), 'ylabel' : create_axis_label('central produced motif'), 'figname' : self.plotpath+figname, } plot_motifs_vs_motifs(rate_constants, trj.letters, c_ref = c_ref, complements = x.parameters['complements'], sorted_by_length = True, ticks = ticks, colorbar_norm = colorbar_norm, fig_dct = fig_dct ) def plot_motifs_vs_motifs(x, letters=['x','y'], zeros=(1,0,0,1), complements = None, c_ref = 1., title=None, xlabel = None, ylabel = None, ticks = None, ax = plt, sorted_by_length = False, colorbar_norm = colors.LogNorm(), fig_dct = None, complemented_shall_be_added_to_xlabel = False ): x = transform_MultiField(x) if colorbar_norm is colors.LogNorm() and np.min(x)<=0: colorbar_norm = None #np.asarray(zeros+zeros)+len(letters) #x = x[:3,:2,:2,:3,:3,:2,:2,:3] if complements is not None: #check that complements has correct shape if len(complements)>len(x): warn("more letters given for complements than inside concentration vector. Will only take needed ones.") complements = complements[:len(x)] x = complement_template(x, complements) if fig_dct is not None and complemented_shall_be_added_to_xlabel: if fig_dct['xlabel'] is not None: fig_dct['xlabel'] += ' (complemented)' elif complemented_shall_be_added_to_xlabel: if xlabel is not None: xlabel += ' (complemented)' else: xlabel = ' (complemented)' if sorted_by_length: x = sort_by_length(x) cw = sort_by_length(compute_words(letters,zeros=zeros)) else: shape1 = np.prod(x.shape[:len(x.shape)//2]) x = x.reshape((shape1,-1)) cw = sort_by_length(compute_words(letters,zeros=zeros)) if ticks is None: ticks = [None,None] imshow_dct = {} if colorbar_norm is colors.LogNorm(): colorbar_norm = colors.LogNorm(vmin=ticks[0], vmax=ticks[1]) else: imshow_dct['vmin']=ticks[0], imshow_dct['vmax'] = ticks[1] im =ax.imshow(x, origin='upper', #interpolation = 'none', norm = colorbar_norm, #FIXME: **imshow_dct ) ax.colorbar(im) ax.xticks(ticks=np.arange(0,len(cw.reshape(-1))), labels=cw.reshape(-1), fontsize='x-small', rotation=90) ax.yticks(ticks=np.arange(0,len(cw.reshape(-1))), labels=cw.reshape(-1), fontsize='x-small') if fig_dct is not None: make_fig(fig_dct) else: ax.xlabel(xlabel) ax.ylabel(ylabel) '''