def tad_density_plot(self, name, axe=None, focus=None, extras=None, normalized=True, savefig=None, shape='ellipse'): """ Draw an summary of the TAD found in a given experiment and their density in terms of relative Hi-C interaction count. :param name: name of the experiment to visualize :param None focus: can pass a tuple (bin_start, bin_stop) to display the alignment between these genomic bins :param None extras: list of coordinates (genomic bin) where to draw a red cross :param None ymax: limit the y axis up to a given value :param ('grey', ): successive colors for alignment :param True normalized: normalized Hi-C count are plotted instead of raw data. :param 'ellipse' shape: which kind of shape to use as schematic representation of TADs. Implemented: 'ellipse', 'rectangle', 'triangle' :param None savefig: path to a file where to save the image generated; if None, the image will be shown using matplotlib GUI (the extension of the file name will determine the desired format). """ if not self.experiments[name].tads: raise Exception("TAD borders not found\n") _tad_density_plot(self.experiments[name], axe=axe, focus=focus, extras=extras, normalized=normalized, savefig=savefig, shape=shape)
def draw(self, focus=None, extras=None, ymax=None, ali_colors=('grey',), normalized=True, savefig=None, shape='ellipse'): """ Draw alignments as a plot. :param None focus: can pass a tuple (bin_start, bin_stop) to display the alignment between these genomic bins :param None extras: list of coordinates (genomic bin) where to draw a red cross :param None ymax: limit the y axis up to a given value :param ('grey', ): successive colors for alignment :param True normalized: normalized Hi-C count are plotted instead of raw data. :param 'ellipse' shape: which kind of shape to use as schematic representation of TADs. Implemented: 'ellipse', 'rectangle', 'triangle' :param None savefig: path to a file where to save the image generated; if None, the image will be shown using matplotlib GUI (the extension of the file name will determine the desired format). """ from matplotlib.cm import jet from matplotlib import pyplot as plt experiments = self.__experiments maxres = max([e.resolution for e in experiments]) facts = [maxres / e.resolution for e in experiments] siz = experiments[0].size if focus: figsiz = 4 + (focus[1] - focus[0]) / 30 else: figsiz = 4 + siz / 30 fig, axes = plt.subplots(nrows=len(experiments), sharex=True, sharey=True, figsize=(figsiz, 1 + len(experiments) * 1.8)) fig.subplots_adjust(hspace=0) maxys = [] for iex, xpr in enumerate(experiments): if not xpr.name in self: continue _tad_density_plot(xpr, maxys=maxys, normalized=normalized, fact_res=facts[iex], axe=axes[iex], extras=extras, shape=shape, focus=focus) # draw alignment columns start = focus[0] if focus else 1 end = focus[1] if focus else xpr.tads[max(xpr.tads)]['end'] maxy = (ymax or max(maxys)) + 0.4 maxxs = [] for iex in range(len(experiments)): starting = focus[0] if focus else 1 ending = (focus[1] if focus else experiments[iex].tads.values()[-1]['end']) axes[iex].hlines(1, 1, end, 'k', lw=1.5) axes[iex].set_ylim((0, maxy)) maxxs.append(ending / facts[iex]) axes[iex].text(starting + 1, float(maxy) / 20, experiments[iex].name, {'ha': 'left', 'va': 'bottom'}) axes[iex].set_yticks([float(i) / 2 for i in range(1, int(maxy + .5) * 2)]) if ymax: axes[iex].set_ylim((0, ymax)) axes[iex].set_xlim(xmin=starting, xmax=max(maxxs)) pos = {'ha': 'center', 'va': 'bottom'} for i, col in enumerate(self.itercolumns()): ends = sorted([(t['end'], j) for j, t in enumerate(col) if t['end']]) beg = (ends[0][0] + 0.9) / facts[ends[0][1]] end = (ends[-1][0] + 1.1) / facts[ends[-1][1]] if focus: if beg < focus[0] or end > focus[1]: continue axes[0].text(beg + float(end - beg) / 2, maxy + float(maxy) / 20, str(i + 1), pos, rotation=90, size='small') for iex, tad in enumerate(col): if not tad['end']: continue axes[iex].axvspan(beg-.2, end+.2, alpha=0.2, color=ali_colors[i%(len(ali_colors))]) axes[iex].set_xlabel('Genomic bin') tit1 = fig.suptitle("TAD borders' alignment", size='x-large') tit2 = axes[0].set_title("Alignment column number") tit2.set_y(1.3) plt.subplots_adjust(top=0.76) # This was for color bar instead of legend # ax1 = fig.add_axes([0.9 + 0.3/figsiz, 0.05, 0.2/figsiz, 0.9]) # cb1 = colorbar.ColorbarBase(ax1, cmap=jet, # norm=colors.Normalize(vmin=0., vmax=1.)) # cb1.set_label('Border prediction score') # cb1.ax.set_yticklabels([str(i)for i in range(1, 11)]) fig.set_facecolor('white') plots = [] for scr in xrange(1, 11): plots += plt.plot((100,),(100,), marker=6, ms=9, color=jet(float(scr) / 10), mec='none') try: axes[-1].legend(plots, [str(scr) for scr in xrange(1, 11)], numpoints=1, title='Border scores', fontsize='small', loc='lower left', bbox_to_anchor=(1, 0.5)) except TypeError: axes[-1].legend(plots, [str(scr) for scr in xrange(1, 11)], numpoints=1, title='Border scores', loc='lower left', bbox_to_anchor=(1, 0.5)) if savefig: tadbit_savefig(savefig) else: plt.show()