700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 曼哈顿图的原理学习和python实现绘制

曼哈顿图的原理学习和python实现绘制

时间:2022-05-14 23:32:39

相关推荐

曼哈顿图的原理学习和python实现绘制

1、简介

曼哈顿图是GWAS(全基因组关联分析)的一个分析工具。

在曼哈顿图中,我们可以设置阈值,找到数据中和表型有强关联性的SNPs。

曼哈顿图的本质是散点图,不过对于不同的染色体,用不同颜色进行区分。图中的X轴是各个SNPs的数据索引,Y轴是对应的P值的取-log10的对数值。

对P值进行对数转换,原本越小的P值会变得很大,而很大和略大的P值则是变得很小,这样更容易突显出有价值的P值和对应的染色体。

2、P值的概念

P值由统计学根据显著性检验方法所得到。

p值是将观察结果认为有效即具有总体代表性的犯错概率,如p=0.05提示样本中变量关联有5%的可能是由于偶然性造成的。(这并不是说如果变量间存在关联,我们可得到5%或95%次数的相同结果,当总体中的变量存在关联,重复研究和发现关联的可能性与设计的统计学效力有关。

一般以P < 0.05 为有统计学差异, P<0.01 为有显著统计学差异,P<0.001为有极其显著的统计学差异。

3、实现曼哈顿图的python代码

使用的数据,由R包qqman里附带的数据做为绘图数据:

实现的代码:

import pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport numpy as np#读取GWAS结果,至少要包含 染色体号(CHR),P值(p.value),以及确保snp被正确排序gwas_data = pd.read_csv(r'gwas.txt',sep=",")#构建一个辅助列,作为各个snp在曼哈顿图x轴上的坐标gwas_data["i"]=gwas_data.indexprint(gwas_data.index)list_=[i for i in range(1,15)]list_ += ['16', '18', '20', '22']xtick = ['chr'+c for c in map(str,list_)]# (optional) 如果p值没有转换成 -log10(p) 那么需要gwas_data["-LOG10_P"]=-np.log10(gwas_data["P"])#开始做图:plot = sns.relplot(data=gwas_data, x='i', y='-LOG10_P', aspect=2.3,\hue='CHR', palette = 'dark', s=4, legend=None) #处理x轴上每个chr标注的位置,这里使用每条染色体上SNP索引的中间值chrom_df=gwas_data.groupby('CHR')['i'].median()#在上一步计算得到的位置添加x轴的刻度和标注plot.ax.set_xticks(chrom_df)plot.ax.set_xticklabels(chrom_df.index)#最后添加各种标注,作为阈值的判断线,调整图像Y轴范围plot.ax.set_xlabel('CHR')plot.fig.suptitle('Manhattan plot')plot.ax.axhline(y=-np.log10(5e-8), linewidth = 2,linestyle="--",color="orange")plot.ax.set_ylim(0,20)#保存图片plt.savefig('manhattan.png')

图片效果

这里数据多,图片面积小,会出现表示P值的点堆积在同一个X轴刻度的错觉。实际上,一个点表示一个SNP(碱基),对应一个P值。

补充,关于matplotlib做出的图Y轴的标签被遮住的问题

这个问题用plt.figure(figsize=(w,h))不能解决,修改画布的W和H,图像也会跟着缩放。但还是可以用如下的方法调整:

plt.show()

在如图圈出的红框中,进行调整,可对图像位置进行调整,最后在保存,就可以解决Y轴标签被遮住的问题。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。