/qqman

Draws Manhattan plot and QQ plot using plink assoc output.

Primary LanguagePythonMIT LicenseMIT

qqman for Python

Install with pypi or anaconda

If you want to check out the source code or have any issues please leave a comment at my github repository.
This library is inspired by r-qqman (see here).
It also contains/will contain other methods for python users.


Contents

  1. Introduction
    1.1. Installation
    1.2. Requirements
    1.3. Features
  2. Manhattan Plot
    2.1. Parameters
    2.2. Examples
  3. QQ Plot
    3.1. Parameters
    3.2. Examples

Using pip

$ pip install qqman
  • matplotlib
  • pandas
  • numpy

pip

$ pip install numpy
$ pip install pandas
$ pip install matplotlib

ananconda

$ conda install -c anaconda numpy
$ conda install -y -c anaconda pandas
$ conda install -y -c conda-forge matplotlib
  1. Manhattan Plot
  2. QQ Plot

Draws Manhattan plot from PLINK --assoc output or any assoc formatted data that contains [chromosome/basepair/p-value] as columns.

assoc : string or pandas.DataFrame - Input file path and name of the Plink assoc output.
- Pandas DataFrame with columns [chromosome/basepair/p-value]
out : string
( optional )
Output path and file name of the plot. (ie. out="./Manhattan.png")
cmap : Colormap
( optional : default=Greys_r )
A Colormap instance or registered colormap name. matplotlib.cm.get_cmap()
cmap_var : int or list
( optional : default=2 )
int : Number of colors to use
list : Specific colors to use in colormap
show : bool
( optional )
If true, the plot will be shown on your screen. (This option doesn't work in CUI environment.)
gap : float
( optional : default=10)
A size of gaps between the group of scatter markers of each chromosome in Manhattan plot
ax : subplot
( optional )
If given, this subplot is used to plot in instead of a new figure being created.
title : string
( optional )
A title of the plot.
title_size : int
( optional )
A size of the title of the plot.
label_size : int
( optional )
A size of x and y labels of the plot.
xtick_size : int
( optional )
A size of xtick labels.
ytick_size : int
( optional )
A size of ytick labels.
xrotation : float
( optional )
A rotation degree of xtick labels.
yrotation : float
( optional )
A rotation degree of ytick labels.
col_chr : string
( optional : default="CHR" )
A string denoting the column name for the chromosome. Defaults to PLINK’s "CHR" Said column must be numeric.
If you have X, Y, or MT chromosomes, be sure to renumber these 23, 24, 25, etc.
col_bp : string
( optional : default="BP" )
A string denoting the column name for the chromosomal position. Defaults to PLINK’s "BP" Said column must be numeric.
col_p : string
( optional : default="P" )
A string denoting the column name for the p-value. Defaults to PLINK’s "P" Said column must be numeric.
col_snp : string
( optional : default="SNP" )
A string denoting the column name for the SNP name (rs number). Defaults to PLINK’s "SNP" Said column should be a character
suggestiveline : string
( optional : default=-log_10(1e-5) )
Where to draw a "suggestive" line. Set to False to disable.
genomewideline : string
( optional : default=-log_10(5e-8) )
Where to draw a "genome-wide sigificant" line. Set to False to disable.

2.2.1. Simple

from qqman import qqman

if __name__ == "__main__":
	qqman.manhattan("../../temp.assoc",out="./Manhattan.png")

Simple Manhattan Plot

2.2.2. Using Subplot

from qqman import qqman
import pandas as pd
import matplotlib.pyplot as plt

if __name__ == "__main__":
	df_assoc = pd.read_csv("../../temp.assoc", header=0, delim_whitespace=True)

	figure, axes = plt.subplots(nrows=2, ncols=2, figsize = (20,20))

	qqman.manhattan("../../temp.assoc", ax=axes[0,0],title="Wider gap 100", gap=100)
	qqman.manhattan("../../temp.assoc", ax=axes[0,1],title="No lines",suggestiveline=False, genomewideline=False)
	qqman.manhattan("../../temp.assoc", ax=axes[1,0],title="Different colormap",cmap=plt.get_cmap("jet"),cmap_var=10)
	qqman.manhattan(df_assoc, ax=axes[1,1],title="From DataFrame with xtick rotation",xrotation=45)

	figure.tight_layout()
	plt.savefig("./manhattan.png",format="png")
	plt.clf()
	plt.close()

Simple Manhattan Plot

Draws a quantile-quantile plot from p-values of GWAS.

assoc
types: [string, pandas.DataFrame, numpy.array, list]
- Input file path and name of the Plink assoc output.
- Pandas DataFrame with columns [chromosome/basepair/p-value]
out : string
( optional )
Output path and file name of the plot. (ie. out="./Manhattan.png")
show : bool
( optional )
If true, the plot will be shown on your screen. (This option doesn't work in CUI environment.)
ax : subplot
( optional )
If given, this subplot is used to plot in instead of a new figure being created.
title : string
( optional )
A title of the plot.
title_size : int
( optional )
A size of the title of the plot.
label_size : int
( optional )
A size of x and y labels of the plot.
xtick_size : int
( optional )
A size of xtick labels.
ytick_size : int
( optional )
A size of ytick labels.
xrotation : float
( optional )
A rotation degree of xtick labels.
yrotation : float
( optional )
A rotation degree of ytick labels.
col_p : string
( optional : default="P" )
A string denoting the column name for the p-value. Defaults to PLINK’s "P" Said column must be numeric.

3.2.1. Simple

from qqman import qqman

if __name__ == "__main__":
	qqman.qqplot("../../temp.assoc",out="./QQplot.png")

Simple Manhattan Plot

3.2.2. Using Subplot

from qqman import qqman
import pandas as pd
import matplotlib.pyplot as plt

if __name__ == "__main__":
	df_assoc = pd.read_csv("../../temp.assoc", header=0, delim_whitespace=True)
	p_vals = list(df_assoc['P'])
	
	figure, axes = plt.subplots(nrows=2, ncols=2, figsize = (20,20))

	qqman.qqplot("../../temp.assoc", ax=axes[0,0],title="From file")
	qqman.qqplot(p_vals, ax=axes[0,1],title="From list")
	qqman.qqplot(df_assoc.P, ax=axes[1,0],title="From Series")
	qqman.qqplot(df_assoc, ax=axes[1,1],title="From DataFrame")

	figure.tight_layout()
	plt.savefig("./SubQQplot.png",format="png")
	plt.clf()
	plt.close()

Simple Manhattan Plot