| import numpy as np |
| import matplotlib |
| import matplotlib.pyplot as plt |
| import matplotlib.patches as mpatches |
| import random |
| import seaborn as sns |
| import os |
| import argparse |
| sns.set() |
| sns.set_style('ticks') |
|
|
| colors = ["#3c5068", "#acbab6", "#dcd3cd", "#d4a6a6"] |
|
|
|
|
| |
| params = {'legend.fontsize': 50, |
| 'figure.figsize': (54, 38), |
| 'axes.labelsize': 60, |
| 'axes.titlesize':60, |
| 'xtick.labelsize':60, |
| 'ytick.labelsize':60} |
|
|
| plt.rcParams.update(params) |
|
|
|
|
| np.random.seed(25) |
|
|
| DISPLAY_DIFF = True |
|
|
| root_path = './../src/exp_optimization/' |
|
|
| PREFIX = 'outputs/' |
|
|
| |
|
|
| TYPE = 'GC_CONTROLED' |
|
|
| DISPLAY_DIFF = True |
|
|
| if TYPE == 'REGULAR': |
| PREFIX = 'outputs/' |
| elif TYPE == 'MIXED': |
| PREFIX = 'outputs_joint/' |
| elif TYPE == 'GC_CONTROLED': |
| PREFIX = 'outputs/gc_' |
| elif TYPE == 'K562': |
| PREFIX = 'outputs/K562_' |
| elif TYPE == 'GM12878': |
| PREFIX = 'outputs/GM12878_' |
|
|
| if DISPLAY_DIFF: |
| parser = argparse.ArgumentParser(description="Gene Expression Optimization Visualization") |
|
|
| |
| parser.add_argument("-g", help="a list of gene names separated by comma") |
|
|
| |
| args = parser.parse_args() |
| gene_names = args.g.split(',') |
|
|
| gene_name = gene_names[0] |
|
|
| init = [] |
| with open(root_path+PREFIX+'init_exps_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| init = [float(score.replace('\n','')) for score in scores] |
|
|
| opt = [] |
| with open(root_path+PREFIX+'opt_exps_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| opt = [float(score.replace('\n','')) for score in scores] |
|
|
|
|
| init = np.power(10,init) |
| opt = np.power(10,opt) |
| diffs = (opt - init)/init |
|
|
|
|
|
|
| print("####################################################################") |
| print(f"{gene_name} results:") |
| print(f"Max Opt: {np.max(opt):.2f}") |
| print(f"Max Init: {np.max(init):.2f}") |
| print(f"Average Percent Increase (wrt Init): {np.average(diffs)*100:.2f}") |
| print(f"Max Percent Increase (wrt Init): {np.max(diffs)*100:.2f}") |
|
|
| indices = np.argsort(opt)[::-1] |
|
|
| init_large = [] |
| init_small = [] |
| opt_large = [] |
| opt_small = [] |
|
|
| for i in range(len(indices)): |
| if diffs[indices[i]] >= 0: |
| init_small.append(init[indices[i]]) |
| init_large.append(0) |
| opt_small.append(0) |
| opt_large.append(opt[indices[i]]) |
| else: |
| init_large.append(init[indices[i]]) |
| init_small.append(0) |
| opt_large.append(0) |
| opt_small.append(opt[indices[i]]) |
|
|
| width = 1.0/(len(indices)) |
| bins = [(i+1) * width for i in range(len(indices))] |
| |
| ns = [i * width for i in range(len(indices))] |
| fig, axs = plt.subplots(2,2) |
|
|
|
|
| axs[0,0].bar(x=ns, bottom=0, width=width, height=opt_large, color=colors[0], edgecolor="white") |
| axs[0,0].bar(x=ns, bottom=0, width=width, height=opt_small, color=colors[0], edgecolor="white") |
| axs[0,0].bar(x=ns, bottom=0, width=width, height=init_small, color=colors[3], edgecolor="white") |
| axs[0,0].bar(x=ns, bottom=0, width=width, height=init_large, color=colors[3], edgecolor="white") |
|
|
| axs[0,0].set_title(gene_name,loc='left',style='italic',fontsize=64) |
| axs[0,0].set_xticks([]) |
| |
| gene_name = gene_names[1] |
|
|
| init = [] |
| with open(root_path+PREFIX+'init_exps_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| init = [float(score.replace('\n','')) for score in scores] |
|
|
| opt = [] |
| with open(root_path+PREFIX+'opt_exps_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| opt = [float(score.replace('\n','')) for score in scores] |
|
|
| init = np.power(10,init) |
| opt = np.power(10,opt) |
| diffs = (opt - init)/init |
|
|
| print("####################################################################") |
| print(f"{gene_name} results:") |
| print(f"Max Opt: {np.max(opt):.2f}") |
| print(f"Max Init: {np.max(init):.2f}") |
| print(f"Average Percent Increase (wrt Init): {np.average(diffs)*100:.2f}") |
| print(f"Max Percent Increase (wrt Init): {np.max(diffs)*100:.2f}") |
|
|
| indices = np.argsort(opt)[::-1] |
|
|
| init_large = [] |
| init_small = [] |
| opt_large = [] |
| opt_small = [] |
|
|
| for i in range(len(indices)): |
| if diffs[indices[i]] >= 0: |
| init_small.append(init[indices[i]]) |
| init_large.append(0) |
| opt_small.append(0) |
| opt_large.append(opt[indices[i]]) |
| else: |
| init_large.append(init[indices[i]]) |
| init_small.append(0) |
| opt_large.append(0) |
| opt_small.append(opt[indices[i]]) |
|
|
| axs[0,1].bar(x=ns, bottom=0, width=width, height=opt_large, color=colors[0], edgecolor="white") |
| axs[0,1].bar(x=ns, bottom=0, width=width, height=opt_small, color=colors[0], edgecolor="white") |
| axs[0,1].bar(x=ns, bottom=0, width=width, height=init_small, color=colors[3], edgecolor="white") |
| axs[0,1].bar(x=ns, bottom=0, width=width, height=init_large, color=colors[3], edgecolor="white") |
| axs[0,1].set_title(gene_name,loc='left',style='italic',fontsize=64) |
| axs[0,1].set_xticks([]) |
|
|
| gene_name = gene_names[2] |
|
|
| init = [] |
| with open(root_path+PREFIX+'init_exps_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| init = [float(score.replace('\n','')) for score in scores] |
|
|
| opt = [] |
| with open(root_path+PREFIX+'opt_exps_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| opt = [float(score.replace('\n','')) for score in scores] |
|
|
|
|
| init = np.power(10,init) |
| opt = np.power(10,opt) |
| diffs = (opt - init)/init |
| |
| print("####################################################################") |
| print(f"{gene_name} results:") |
| print(f"Max Opt: {np.max(opt):.2f}") |
| print(f"Max Init: {np.max(init):.2f}") |
| print(f"Average Percent Increase (wrt Init): {np.average(diffs)*100:.2f}") |
| print(f"Max Percent Increase (wrt Init): {np.max(diffs)*100:.2f}") |
|
|
| indices = np.argsort(opt)[::-1] |
|
|
| init_large = [] |
| init_small = [] |
| opt_large = [] |
| opt_small = [] |
|
|
| for i in range(len(indices)): |
| if diffs[indices[i]] >= 0: |
| init_small.append(init[indices[i]]) |
| init_large.append(0) |
| opt_small.append(0) |
| opt_large.append(opt[indices[i]]) |
| else: |
| init_large.append(init[indices[i]]) |
| init_small.append(0) |
| opt_large.append(0) |
| opt_small.append(opt[indices[i]]) |
|
|
| axs[1,0].bar(x=ns, bottom=0, width=width, height=opt_large, color=colors[0], edgecolor="white") |
| axs[1,0].bar(x=ns, bottom=0, width=width, height=opt_small, color=colors[0], edgecolor="white") |
| axs[1,0].bar(x=ns, bottom=0, width=width, height=init_small, color=colors[3], edgecolor="white") |
| axs[1,0].bar(x=ns, bottom=0, width=width, height=init_large, color=colors[3], edgecolor="white") |
| axs[1,0].set_title(gene_name,loc='left',style='italic',fontsize=64) |
| axs[1,0].set_xticks([]) |
|
|
| gene_name = gene_names[3] |
|
|
| init = [] |
| with open(root_path+PREFIX+'init_exps_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| init = [float(score.replace('\n','')) for score in scores] |
|
|
| opt = [] |
| with open(root_path+PREFIX+'opt_exps_'+gene_name+'.txt') as f: |
| scores = f.readlines() |
| opt = [float(score.replace('\n','')) for score in scores] |
|
|
| init = np.power(10,init) |
| opt = np.power(10,opt) |
| diffs = (opt - init)/init |
|
|
| print("####################################################################") |
| print(f"{gene_name} results:") |
| print(f"Max Opt: {np.max(opt):.2f}") |
| print(f"Max Init: {np.max(init):.2f}") |
| print(f"Average Percent Increase (wrt Init): {np.average(diffs)*100:.2f}") |
| print(f"Max Percent Increase (wrt Init): {np.max(diffs)*100:.2f}") |
| print("####################################################################") |
|
|
|
|
| indices = np.argsort(opt)[::-1] |
| init_large = [] |
| init_small = [] |
| opt_large = [] |
| opt_small = [] |
|
|
| for i in range(len(indices)): |
| if diffs[indices[i]] >= 0: |
| init_small.append(init[indices[i]]) |
| init_large.append(0) |
| opt_small.append(0) |
| opt_large.append(opt[indices[i]]) |
| else: |
| init_large.append(init[indices[i]]) |
| init_small.append(0) |
| opt_large.append(0) |
| opt_small.append(opt[indices[i]]) |
|
|
| axs[1,1].bar(x=ns, bottom=0, width=width, height=opt_large, color=colors[0], edgecolor="white") |
| axs[1,1].bar(x=ns, bottom=0, width=width, height=opt_small, color=colors[0], edgecolor="white") |
| axs[1,1].bar(x=ns, bottom=0, width=width, height=init_small, color=colors[3], edgecolor="white") |
| axs[1,1].bar(x=ns, bottom=0, width=width, height=init_large, color=colors[3], edgecolor="white") |
| axs[1,1].set_title(gene_name,loc='left',style='italic',fontsize=64) |
| axs[1,1].set_xticks([]) |
|
|
| orange_patch = mpatches.Patch(color=colors[3], label='Initial Expression') |
| blue_patch = mpatches.Patch(color=colors[0], label='Optimized Expression') |
| fig.legend(handles=[orange_patch,blue_patch],loc='upper right') |
|
|
| axs[0,0].set_ylabel('TPM Expression') |
| axs[1,0].set_ylabel('TPM Expression') |
|
|
| axs[1,0].set_xlabel('UTR Samples') |
| axs[1,1].set_xlabel('UTR Samples') |
|
|
|
|
| fig.tight_layout() |
| plt.gcf().subplots_adjust(left=0.06) |
|
|
| os.makedirs('./plots/',exist_ok=True) |
|
|
| plt.savefig(f'./plots/exp_opt_all_{TYPE}_{gene_names}.png') |
|
|
|
|
|
|
|
|
|
|