Source code for sequana.viz.boxplot

# -*- coding: utf-8 -*-
#
#  This file is part of Sequana software
#
#  Copyright (c) 2016 - Sequana Development Team
#
#  File author(s):
#      Thomas Cokelaer <thomas.cokelaer@pasteur.fr>
#
#  Distributed under the terms of the 3-clause BSD license.
#  The full license is in the LICENSE file, distributed with this software.
#
#  website: https://github.com/sequana/sequana
#  documentation: http://sequana.readthedocs.io
#
##############################################################################


from sequana.lazy import pandas as pd
from sequana.lazy import pylab


[docs] class Boxplot(object): """Used to plot boxplot of fastq quality a la fastqc""" def __init__(self, data): # if data is a dataframe, keep it else, transform to dataframe try: self.df = pd.DataFrame(data) except: self.df = data self.xmax = self.df.shape[1] self.X = None
[docs] def plot(self, color_line="r", bgcolor="grey", color="yellow", lw=4, hold=False, ax=None): xmax = self.xmax + 1 if ax: pylab.sca(ax) if self.X is None: X = range(1, self.xmax + 1) pylab.fill_between( X, self.df.mean() + self.df.std(), self.df.mean() - self.df.std(), color=color, interpolate=False ) pylab.plot(X, self.df.mean(), color=color_line, lw=lw) if self.df.mean().mean() < 40: # illumina pylab.fill_between([0, xmax], [0, 0], [20, 20], color="red", alpha=0.3) pylab.fill_between([0, xmax], [20, 20], [30, 30], color="orange", alpha=0.3) pylab.fill_between([0, xmax], [30, 30], [41, 41], color="green", alpha=0.3) pylab.ylim([0, 41]) else: pylab.fill_between([0, xmax], [0, 0], [20, 20], color="red", alpha=0.3) pylab.fill_between([0, xmax], [20, 20], [30, 30], color="orange", alpha=0.3) pylab.fill_between([0, xmax], [30, 30], [101, 101], color="green", alpha=0.3) pylab.ylim([0, 101]) pylab.xlim([0, self.xmax + 1]) pylab.title("Quality scores across all bases") pylab.xlabel("Position in read (bp)") pylab.ylabel("Quality") pylab.grid(axis="x")