def assign_colors(self, k): from matplotlib.colors import rgb2hex colorset = get_map('Paired', 'qualitative', k).mpl_colors colorset = [rgb2hex(x) for x in colorset] cs = colorset + ['w'] * (self.n - k - 1) shuffle(cs) self.colors = cs[:self.n / 2] + ['k'] + cs[self.n / 2:] lf, p, rf = self.find_k() self.exchange(lf, p - 2) self.exchange(rf, p + 2)
def assign_colors(self, k): from matplotlib.colors import rgb2hex colorset = get_map("Paired", "qualitative", k).mpl_colors colorset = [rgb2hex(x) for x in colorset] cs = colorset + ["w"] * (self.n - k - 1) shuffle(cs) self.colors = cs[:self.n / 2] + ["k"] + cs[self.n / 2:] lf, p, rf = self.find_k() self.exchange(lf, p - 2) self.exchange(rf, p + 2)
def __init__(self, fig, root, canvas, chr, xlim, datadir, order=None, hlsuffix=None, palette=None, cap=50, gauge="bottom", plot_label=True, plot_chr_label=True, gauge_step=5000000, vlines=None, labels_dict={}, diverge=('r', 'g')): x, y, w, h = canvas p = .01 root.add_patch(Rectangle((x - p, y - p), w + 2 * p, h + 2 * p, lw=1, fill=False, ec="darkslategray", zorder=10)) datafiles = glob(op.join(datadir, chr + "*")) if order: datafiles = [z for z in datafiles if z.split(".")[1] in order] datafiles.sort(key=lambda x: order.index(x.split(".")[1])) ntracks = len(datafiles) yinterval = h / ntracks yy = y + h if palette is None: # Get the palette set2 = get_map('Set2', 'qualitative', ntracks).mpl_colors else: set2 = [palette] * ntracks if gauge == "top": gauge_ax = fig.add_axes([x, yy + p, w, .0001]) adjust_spines(gauge_ax, ["top"]) tpos = yy + .07 elif gauge == "bottom": gauge_ax = fig.add_axes([x, y - p, w, .0001]) adjust_spines(gauge_ax, ["bottom"]) tpos = y - .07 start, end = xlim if gauge: fs = gauge_step < 1000000 setup_gauge_ax(gauge_ax, start, end, gauge_step, float_formatter=fs) if plot_chr_label: root.text(x + w / 2, tpos, chr, ha="center", va="center", color="darkslategray", size=16) yys = [] for label, datafile, c in zip(order, datafiles, set2): yy -= yinterval yys.append(yy) ax = fig.add_axes([x, yy, w, yinterval * .9]) xy = XYtrack(ax, datafile, color=c) xy.interpolate(end) xy.cap(ymax=cap) if vlines: xy.vlines(vlines) if hlsuffix: hlfile = op.join(datadir, ".".join((label, hlsuffix))) xy.import_hlfile(hlfile, chr, diverge=diverge) if plot_label: label = labels_dict.get(label, label.capitalize()) label = r"\textit{{{0}}}".format(label) root.text(x - .015, yy + yinterval / 2, label, ha="right", va="center") xy.draw() ax.set_xlim(*xlim) self.yys = yys
def __init__(self, fig, root, canvas, chr, xlim, datadir, order=None, hlsuffix=None, palette=None, cap=50, gauge="bottom", plot_label=True, plot_chr_label=True, gauge_step=5000000, vlines=None, labels_dict={}, diverge=('r', 'g')): x, y, w, h = canvas p = .01 root.add_patch( Rectangle((x - p, y - p), w + 2 * p, h + 2 * p, lw=1, fill=False, ec="darkslategray", zorder=10)) datafiles = glob(op.join(datadir, chr + "*")) if order: datafiles = [z for z in datafiles if z.split(".")[1] in order] datafiles.sort(key=lambda x: order.index(x.split(".")[1])) ntracks = len(datafiles) yinterval = h / ntracks yy = y + h if palette is None: # Get the palette set2 = get_map('Set2', 'qualitative', ntracks).mpl_colors else: set2 = [palette] * ntracks if gauge == "top": gauge_ax = fig.add_axes([x, yy + p, w, .0001]) adjust_spines(gauge_ax, ["top"]) tpos = yy + .07 elif gauge == "bottom": gauge_ax = fig.add_axes([x, y - p, w, .0001]) adjust_spines(gauge_ax, ["bottom"]) tpos = y - .07 start, end = xlim if gauge: fs = gauge_step < 1000000 setup_gauge_ax(gauge_ax, start, end, gauge_step, float_formatter=fs) if plot_chr_label: root.text(x + w / 2, tpos, chr, ha="center", va="center", color="darkslategray", size=16) yys = [] for label, datafile, c in zip(order, datafiles, set2): yy -= yinterval yys.append(yy) ax = fig.add_axes([x, yy, w, yinterval * .9]) xy = XYtrack(ax, datafile, color=c) xy.interpolate(end) xy.cap(ymax=cap) if vlines: xy.vlines(vlines) if hlsuffix: hlfile = op.join(datadir, ".".join((label, hlsuffix))) xy.import_hlfile(hlfile, chr, diverge=diverge) if plot_label: label = labels_dict.get(label, label.capitalize()) label = r"\textit{{{0}}}".format(label) root.text(x - .015, yy + yinterval / 2, label, ha="right", va="center") xy.draw() ax.set_xlim(*xlim) self.yys = yys