使用python绘制GWAS的曼哈顿图 Mahattan plot

曼哈顿图对GWAS结果进行可视化最常用的图之一,其横轴可理解为snp在相应染色体上的位置,纵轴则为-log10(P)。因其酷似纽约曼哈顿的天际线而被命名为曼哈顿图。

本文将介绍利用python作图的方法。

要使用的package:

pandas , numpy, matplotlib, seaborn


具体代码如下:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

#读取GWAS结果,至少要包含 染色体号(CHR),P值(p.value),以及确保snp被正确排序
gwas_sumstats = pd.read_csv("test.txt")  

#构建一个辅助列,作为各个snp在曼哈顿图x轴上的坐标
gwas_sumstats["i"]=gwas_sumstats.index

# (optional) 如果p值没有转换成 -log10(p) 那么需要
gwas_sumstats["LOG10_P"]=-np.log10(gwas_sumstats["p.value"])

#开始做图
plot = sns.relplot(data=gwas_sumstats, x='i', y='LOG10_P', aspect=2.3, 
                   hue='CHR', palette = 'dark', s=4, legend=None) 

#处理x轴上每个chr标注的位置,这里使用每条染色体上SNP索引的中间值
chrom_df=gwas_sumstats.groupby('CHR')['i'].median()

#在上一步计算得到的位置添加x轴的标注
plot.ax.set_xticks(chrom_df)
plot.ax.set_xticklabels(chrom_df.index)

#最后添加各种标注,辅助线,调整图像范围
plot.ax.set_xlabel('CHR')
plot.ax.set_ylim(0,20)
plot.ax.axhline(y=-np.log10(5e-8), linewidth = 2,linestyle="--",color="grey")
plot.fig.suptitle('Manhattan plot')

这样我们就得到了如下的曼哈顿图: