def oligotype_distribution_across_samples(samples_dict, colors_dict, output_file = None, legend = False, project_title = None, display = True, oligos = None): samples = samples_dict.keys() samples.sort() if oligos == None: oligos = get_oligos_sorted_by_abundance(samples_dict, oligos) else: oligos.reverse() if colors_dict == None: colors_dict = random_colors(copy.deepcopy(oligos)) oligo_percents = {} max_normalized_across_samples_vectors = {} sum_normalized_across_samples_vectors = {} for oligo in oligos: percents = [] for sample in samples: if samples_dict[sample].has_key(oligo): percents.append(samples_dict[sample][oligo] * 100.0 / sum(samples_dict[sample].values())) else: percents.append(0.0) oligo_percents[oligo] = percents for oligo in oligos: max_normalized_across_samples_vectors[oligo] = [p * 100.0 / max(oligo_percents[oligo]) for p in oligo_percents[oligo]] sum_normalized_across_samples_vectors[oligo] = [p * 100.0 / sum(oligo_percents[oligo]) for p in oligo_percents[oligo]] # figure.. fig = plt.figure(figsize=(20, 10)) if legend: plt.subplots_adjust(left=0.03, bottom = 0.15, top = 0.97, right = 0.80) else: plt.subplots_adjust(left=0.03, bottom = 0.15, top = 0.97, right = 0.99) plt.rcParams.update({'axes.linewidth' : 0.1}) plt.rc('grid', color='0.70', linestyle='-', linewidth=0.1) plt.grid(True) plt.subplot(2, 1, 1) plt.grid(True) N = len(samples) ind = np.arange(N) width = 0.75 lines = [] for i in range(0, len(oligos)): oligo = oligos[i] try: color = HTMLColorToRGB(colors_dict[oligos[i]]) except: color = 'black' if len(oligos) < 50: plt.plot(max_normalized_across_samples_vectors[oligo], color=color, linewidth = 3, alpha = 0.3, zorder = i) plt.plot(max_normalized_across_samples_vectors[oligo], color=color, linewidth = 5, alpha = 0.2, zorder = i) p = plt.plot(max_normalized_across_samples_vectors[oligo], color=color, linewidth = 1, alpha = 0.9, zorder = i) lines.append(p) plt.ylabel('MAX Normalized', size='large') plt.title('Normalized Oligotype Distributions Across Samples %s' \ % (('for "%s"' % project_title) if project_title else '')) plt.xticks(ind, ['' for d in samples], rotation=90, size='small') plt.yticks([]) plt.ylim(ymax = 100) plt.xlim(xmin = -(width) / 2, xmax = len(samples) - 0.5) if legend: plt.legend([b[0] for b in lines][::-1], oligos[::-1], bbox_to_anchor=(1.01, 1), loc=2, borderaxespad=0.0, shadow=True, fancybox=True) leg = plt.gca().get_legend() ltext = leg.get_texts() llines = leg.get_lines() frame = leg.get_frame() frame.set_facecolor('0.80') plt.setp(ltext, fontsize='small', fontname='arial', family='monospace') plt.setp(llines, linewidth=1.5) plt.subplot(2, 1, 2) if legend: plt.subplots_adjust(left=0.03, bottom = 0.15, top = 0.97, right = 0.80) else: plt.subplots_adjust(left=0.03, bottom = 0.15, top = 0.97, right = 0.99) plt.rcParams.update({'axes.linewidth' : 0.1}) plt.rc('grid', color='0.70', linestyle='-', linewidth=0.1) plt.grid(True) for i in range(0, len(oligos)): oligo = oligos[i] try: color = HTMLColorToRGB(colors_dict[oligos[i]]) except: color = 'black' if len(oligos) < 50: plt.plot(sum_normalized_across_samples_vectors[oligo], color=color, linewidth = 3, alpha = 0.3, zorder = i) plt.plot(sum_normalized_across_samples_vectors[oligo], color=color, linewidth = 5, alpha = 0.2, zorder = i) p = plt.plot(sum_normalized_across_samples_vectors[oligo], color=color, linewidth = 1, alpha = 0.9, zorder = i) plt.ylabel('SUM Normalized', size='large') plt.xticks(ind, samples, rotation=90, size='small') plt.yticks([]) plt.ylim(ymax = 100) plt.xlim(xmin = -(width) / 2, xmax = len(samples) - 0.5) if output_file: plt.savefig(output_file) if display: try: plt.show() except: pass
def oligotype_distribution_stack_bar(samples_dict, colors_dict, output_file = None, legend = False,\ colors_export = None, project_title = None, display = True, oligos = None): samples = samples_dict.keys() samples.sort() if oligos == None: oligos = get_oligos_sorted_by_abundance(samples_dict, oligos) else: oligos.reverse() if colors_dict == None: colors_dict = random_colors(copy.deepcopy(oligos)) samples_oligo_vectors = {} for sample in samples: vector = [] for oligo in oligos: if samples_dict[sample].has_key(oligo): vector.append(samples_dict[sample][oligo]) else: vector.append(0) samples_oligo_vectors[sample] = vector samples_oligo_vectors_percent_normalized = {} for sample in samples: total_oligos_in_sample = sum(samples_oligo_vectors[sample]) vector = [] for oligo_abundance in samples_oligo_vectors[sample]: vector.append(oligo_abundance * 100.0 / total_oligos_in_sample) samples_oligo_vectors_percent_normalized[sample] = vector # figure.. fig = plt.figure(figsize=(20, 10)) if legend: plt.subplots_adjust(left=0.03, bottom=0.15, top=0.97, right=0.90) else: plt.subplots_adjust(left=0.03, bottom=0.15, top=0.97, right=0.99) N = len(samples) ind = np.arange(N) width = 0.75 bars = [] colors_list = [] for i in range(0, len(oligos)): values = [ samples_oligo_vectors_percent_normalized[sample][i] for sample in samples ] bottom = [ sum(samples_oligo_vectors_percent_normalized[sample][0:i]) for sample in samples ] try: color = HTMLColorToRGB(colors_dict[oligos[i]]) colors_list.append(colors_dict[oligos[i]]) except: color = 'black' colors_list.append('#000000') p = plt.bar(ind, values, width, bottom=bottom, color=color) bars.append(p) if colors_export: colors_list = reversed(colors_list) colors_file = open(colors_export, 'w') for oligo in oligos: colors_file.write('%s\t%s\n' % (oligo, colors_dict[oligo])) colors_file.close() plt.ylabel('Oligotype Distribution', size='large') plt.title('Stacked Bar Charts of Oligotype Distribution %s' \ % (('for "%s"' % project_title) if project_title else '')) plt.xticks(ind + width / 2., samples, rotation=90, size='small') plt.yticks([]) plt.ylim(ymax=100) plt.xlim(xmin=-(width) / 2, xmax=len(samples)) if legend: plt.legend([b[0] for b in bars][::-1], oligos[::-1], bbox_to_anchor=(1.01, 1), loc=2, borderaxespad=0.0, shadow=True, fancybox=True) leg = plt.gca().get_legend() ltext = leg.get_texts() llines = leg.get_lines() frame = leg.get_frame() frame.set_facecolor('0.80') plt.setp(ltext, fontsize='small', fontname='arial', family='monospace') plt.setp(llines, linewidth=1.5) if output_file: plt.savefig(output_file) if display: try: plt.show() except: pass
def oligotype_distribution_stack_bar(samples_dict, colors_dict, output_file = None, legend = False,\ colors_export = None, project_title = None, display = True, oligos = None): samples = samples_dict.keys() samples.sort() if oligos == None: oligos = get_oligos_sorted_by_abundance(samples_dict, oligos) else: oligos.reverse() if colors_dict == None: colors_dict = random_colors(copy.deepcopy(oligos)) samples_oligo_vectors = {} for sample in samples: vector = [] for oligo in oligos: if samples_dict[sample].has_key(oligo): vector.append(samples_dict[sample][oligo]) else: vector.append(0) samples_oligo_vectors[sample] = vector samples_oligo_vectors_percent_normalized = {} for sample in samples: total_oligos_in_sample = sum(samples_oligo_vectors[sample]) vector = [] for oligo_abundance in samples_oligo_vectors[sample]: vector.append(oligo_abundance * 100.0 / total_oligos_in_sample) samples_oligo_vectors_percent_normalized[sample] = vector # figure.. fig = plt.figure(figsize=(20, 10)) if legend: plt.subplots_adjust(left=0.03, bottom = 0.15, top = 0.97, right = 0.90) else: plt.subplots_adjust(left=0.03, bottom = 0.15, top = 0.97, right = 0.99) N = len(samples) ind = np.arange(N) width = 0.75 bars = [] colors_list = [] for i in range(0, len(oligos)): values = [samples_oligo_vectors_percent_normalized[sample][i] for sample in samples] bottom = [sum(samples_oligo_vectors_percent_normalized[sample][0:i]) for sample in samples] try: color = HTMLColorToRGB(colors_dict[oligos[i]]) colors_list.append(colors_dict[oligos[i]]) except: color = 'black' colors_list.append('#000000') p = plt.bar(ind, values, width, bottom=bottom, color=color) bars.append(p) if colors_export: colors_list = reversed(colors_list) colors_file = open(colors_export, 'w') for oligo in oligos: colors_file.write('%s\t%s\n' % (oligo, colors_dict[oligo])) colors_file.close() plt.ylabel('Oligotype Distribution', size='large') plt.title('Stacked Bar Charts of Oligotype Distribution %s' \ % (('for "%s"' % project_title) if project_title else '')) plt.xticks(ind+width/2., samples, rotation=90, size='small') plt.yticks([]) plt.ylim(ymax = 100) plt.xlim(xmin = -(width) / 2, xmax = len(samples)) if legend: plt.legend([b[0] for b in bars][::-1], oligos[::-1], bbox_to_anchor=(1.01, 1), loc=2, borderaxespad=0.0, shadow=True, fancybox=True) leg = plt.gca().get_legend() ltext = leg.get_texts() llines = leg.get_lines() frame = leg.get_frame() frame.set_facecolor('0.80') plt.setp(ltext, fontsize='small', fontname='arial', family='monospace') plt.setp(llines, linewidth=1.5) if output_file: plt.savefig(output_file) if display: try: plt.show() except: pass