NanoPlot
========

Plotting tool for Oxford Nanopore sequencing data and alignments.

|Twitter URL| |conda badge| |Build Status| |Code Health|

.. figure:: https://github.com/wdecoster/NanoPlot/blob/master/examples/scaled_Log_Downsampled_LengthvsQualityScatterPlot_kde.png
   :alt: Example plot

   Example plot

The example plot above shows a bivariate plot comparing log transformed
read length with average basecall Phred quality score. More examples can
be found in the `gallery on my blog 'Gigabase Or
Gigabyte'. <https://gigabaseorgigabyte.wordpress.com/2017/06/01/example-gallery-of-nanoplot/>`__

In addition to various plots also a NanoStats file is created
summarizing key features of the dataset.

| This script performs data extraction from Oxford Nanopore sequencing
  data in the following formats:
| - fastq files
| (can be bgzip, bzip2 or gzip compressed)
| - fastq files generated by albacore or MinKNOW containing additional
  information
| (can be bgzip, bzip2 or gzip compressed)
| - sorted bam files
| - sequencing\_summary.txt output table generated by albacore

INSTALLATION
~~~~~~~~~~~~

``pip install NanoPlot``

| Upgrade to a newer version using:
| ``pip install NanoPlot --upgrade``

or

| |conda badge|
| ``conda install -c bioconda nanoplot``

STATUS
~~~~~~

|Build Status| |Code Health|

The script is written for python3.

USAGE
~~~~~

::

    NanoPlot [-h] [-v] [-t THREADS] [--verbose] [-o OUTDIR] [-p PREFIX]
                    [--maxlength N] [--drop_outliers] [--downsample N]
                    [--loglength] [--alength] [--minqual N]
                    [--readtype {1D,2D,1D2}] [--barcoded] [-c COLOR]
                    [-f {eps,jpeg,jpg,pdf,pgf,png,ps,raw,rgba,svg,svgz,tif,tiff}]
                    [--plots [{kde,hex,dot,pauvre} [{kde,hex,dot,pauvre} ...]]]
                    [--listcolors]
                    (--fastq file [file ...] | --fastq_rich file [file ...] | --fastq_minimal file [file ...] | --summary file [file ...] | --bam file [file ...])

    General options:
      -h, --help            show the help and exit
      -v, --version         Print version and exit.
      -t, --threads THREADS
                            Set the allowed number of threads to be used by the script
      --verbose             Write log messages also to terminal.
      --store               Store the extracted data in a pickle file for future plotting using the --pickle input option
      --report              Create a html report containing all plots and stats.
      -o, --outdir OUTDIR   Specify directory in which output has to be created.
      -p, --prefix PREFIX   Specify an optional prefix to be used for the output files.

    Input data sources, one of these is required.:
      --fastq file [file ...]
                              Data is in one or more default fastq file(s).
      --fastq_rich file [file ...]
                              Data is in one or more fastq file(s) generated by albacore or MinKNOW with
                              additional information concerning channel and time.
      --fastq_minimal file [file ...]
                              Data is in one or more fastq file(s) generated by albacore or MinKNOW with
                              additional information concerning channel and time. Minimal data is extracted
                              swiftly without elaborate checks.
      --summary file [file ...]
                              Data is in one or more summary file(s) generated by albacore.
      --bam file [file ...]   Data is in one or more sorted bam file(s).
      --pickle pickle         Data is a pickle file stored earlier using the --store option


    Each of these options can take one or multiple files e.g.
      --summary summary1.txt summary2.txt summary3.txt
      --bam bam1.txt bam2.txt

    Options for filtering or transforming input prior to plotting:
      --maxlength N         Drop reads longer than length specified.
      --drop_outliers       Drop outlier reads with extreme long length.
      --downsample N        Reduce dataset to N reads by random sampling.
      --loglength           Logarithmic scaling of lengths in plots.
      --alength             Use aligned read lengths rather than sequenced length (bam mode)
      --minqual N           Drop reads with an average quality lower than specified.
      --readtype {1D,2D,1D2}
                            Which read type to extract information about from summary. Options are 1D, 2D,
                            1D2
      --barcoded            Use if you want to split the summary file by barcode

    Options for customizing the plots created:
      -c, --color COLOR     Specify a color for the plots, must be a valid matplotlib color
      -f, --format {eps,jpeg,jpg,pdf,pgf,png,ps,raw,rgba,svg,svgz,tif,tiff}
                            Specify the output format of the plots.
      --plots [{kde,hex,dot,pauvre} [{kde,hex,dot,pauvre} ...]]
                            Specify which bivariate plots have to be made.
      --no-N50              Hide the N50 mark in the read length histogram
      --title TITLE         Add a title to all plots, requires quoting if using spaces
      --listcolors          List the colors which are available for plotting and exit.

EXAMPLES
~~~~~~~~

.. code:: bash

    Nanoplot --summary sequencing_summary.txt --loglength -o summary-plots-log-transformed  
    NanoPlot -t 2 --fastq reads1.fastq.gz reads2.fastq.gz --maxlength 40000 --plots hex dot
    NanoPlot -t 12 --color yellow --bam alignment1.bam alignment2.bam alignment3.bam --downsample 10000 -o bamplots_downsampled

This script now also provides read length vs mean quality plots in the
'`pauvre <https://github.com/conchoecia/pauvre>`__'-style from
[@conchoecia](https://github.com/conchoecia).

`ACKNOWLEDGMENTS <https://github.com/wdecoster/NanoPlot/blob/master/ACKNOWLEDGMENTS.MD>`__
------------------------------------------------------------------------------------------

I welcome all suggestions, bug reports, feature requests and
contributions. Please leave an
`issue <https://github.com/wdecoster/NanoPlot/issues>`__ or open a pull
request. I will usually respond within a day, or rarely within a few
days.

COMPANION SCRIPTS
-----------------

-  `NanoComp <https://github.com/wdecoster/nanocomp>`__: comparing
   multiple runs
-  `NanoStat <https://github.com/wdecoster/nanostat>`__: statistic
   summary report of reads or alignments
-  `NanoFilt <https://github.com/wdecoster/nanofilt>`__: filtering and
   trimming of reads
-  `NanoLyse <https://github.com/wdecoster/nanolyse>`__: removing
   contaminant reads (e.g. lambda control DNA) from fastq

.. |Twitter URL| image:: https://img.shields.io/twitter/url/https/twitter.com/wouter_decoster.svg?style=social&label=Follow%20%40wouter_decoster
   :target: https://twitter.com/wouter_decoster
.. |conda badge| image:: https://anaconda.org/bioconda/nanoplot/badges/installer/conda.svg
   :target: https://anaconda.org/bioconda/nanoplot
.. |Build Status| image:: https://travis-ci.org/wdecoster/NanoPlot.svg?branch=master
   :target: https://travis-ci.org/wdecoster/NanoPlot
.. |Code Health| image:: https://landscape.io/github/wdecoster/NanoPlot/master/landscape.svg?style=flat
   :target: https://landscape.io/github/wdecoster/NanoPlot/master
