Mercurial > repos > pdeford > dotplot
view dotplot/dotplot.py @ 0:a8fcdd1c2cce draft
Uploaded
author | pdeford |
---|---|
date | Tue, 01 Nov 2016 15:19:49 -0400 |
parents | |
children |
line wrap: on
line source
#!/usr/bin/env python import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import sys def main(): input_file = open(sys.argv[1]) filter = int(sys.argv[2]) png_path = sys.argv[3] sizes = {} alignments = {} for line in input_file: fields = line.split() r_start = int(fields[5]) r_end = int(fields[6]) q_start = int(fields[16]) q_end = int(fields[17]) contig_name = fields[9] contig_size = int(fields[11]) reference_size = int(fields[3]) if contig_name not in sizes: sizes[contig_name] = contig_size alignments[contig_name] = [] if abs(r_start - r_end) > filter: alignments[contig_name].append([(r_start, r_end), (q_start, q_end)]) cumulative = 0 plt.figure() yticks = [[], []] for key in sorted(sizes.keys(), key=lambda x:sizes[x], reverse=True): for reference, query in alignments[key]: plt.plot(reference, [x + cumulative for x in query], 'k-', zorder=10) yticks[0].append(cumulative + sizes[key]/2) yticks[1].append("{} bp".format(sizes[key])) cumulative += sizes[key] plt.axhline(cumulative, zorder=1, color='lightgray', ) plt.xlim([0,reference_size]) plt.ylim([0,cumulative]) plt.yticks(*yticks) plt.tick_params(axis='y', which='both',length=0) plt.xlabel("Position in Reference (bp)") plt.ylabel("Contigs by size") plt.tight_layout() plt.savefig(png_path, dpi=200, format='pdf') if __name__ == '__main__': main()