【前言】其实这篇文章是为了简单介绍一下geneview的用法,它是一个Python高级库,建立在matplotlib的基础之上,专门用于基因组数据的可视化,目的是为了使创建高大上(精致)的基因组数据图表变得简单。目前该发布的Python包中已经内置多个优美的调色板和风格(默认情况下就能创建赏心悦目的图形),同时已经集成了曼哈顿图和Q-Q图的绘制函数。作为该Python包的主要开发者,只是如此是远远不够的,在未来的日子里,我希望它能在功能不断完善的同时也变得更加易用。

曼哈顿图和QQ图是两个在全基因组关联(GWAS)分析里面最常出现的图形,基本上已经是GWAS的标配,几乎在每篇GWAS的文章都会见到,它们的作用和所要传达出来的信息我也在[上一篇关于GWAS的博文]()中做了些说明,在这里我们就只集中在如何用Python和geneview将其有效地展现出来。

首先,准备一些数据来作为例子。

我这里用来展现的数据是2011年丹麦人所做过的一个关于年轻人过度肥胖的GWAS研究——GOYA,数据也是从他们所发表的结果中获得,总共有5,373个样本,其中超重的个体(case)有2,633个,正常的个体(control)是2,740个,从样本量上看还算可以。为了方便使用,我对其做了相关的处理,包括从PED和MAP文件到GEN文件的生成,并重复了一次case-control的关联性分析,计算出了芯片上所研究的各个SNP位点与肥胖相关的显著性程度(即p-value),最后又将结果数据抽取出来做成数据集——放在这里供下载(15.6Mb,csv格式)。以上内容虽提及到了一些领域内术语和相关文件格式,但若不懂也请不必纠结,因为后续处理都是基于这个最终的数据集来完成的

接着,需要将geneview软件包加入到你的Python中,有多种不同的方式,但推荐直接使用pip,以下是安装比较稳定的发布版,直接在终端命令行下(Linux or Mac)输入:pip install geneview

或者,也可以直接从github上安装正在开发的版本:pip install git+git://github.com/ShujiaHuang/geneview.git#egg=geneview

第三种办法就是直接下载源码,然后自行编译,虽然不推荐这种做法(因为还有依赖包必须自行下载安装,过程会比较麻烦低效),但对于某些不能连接外网的集群也只能如此,这三种方式都是可行的。

曼哈顿图

将示例数据下载下来:wget https://raw.githubusercontent.com/ShujiaHuang/geneview-data/master/GOYA.csv ./

先简单地查看一下数据的格式:chrID,rsID,position,pvalue

1,rs3094315,742429,0.144586

1,rs3115860,743268,0.230022

1,rs12562034,758311,0.644366

1,rs12124819,766409,0.146269

1,rs4475691,836671,0.458197

1,rs28705211,890368,0.362731

1,rs13303118,908247,0.22912

1,rs9777703,918699,0.37948

1,rs3121567,933331,0.440824

一共是4列(逗号分隔),分别为:[1]染色体编号,[2]SNP rs 编号,[3] 位点在染色体上的位置,[4]显著性差异程度(pvalue)。在本例曼哈顿图中我们只需要使用第1,3和4列;而QQ图则只需要第4列——pvalue。

下面我们先从绘制曼哈顿图开始。我们先将需要的数据读取到一个列表中,可以这样做:import csv

data = []

with open(“GOYA.csv”) as f:

f_csv = csv.reader(f)

headers = next(f_csv)

data = [[row[0], int(row[2]), float(row[3])] for row in f_csv]

现在GOYA.csv中的数据就都存放在data列表中了,由于Python在读取文件中数据时,都是以string类型存放,因此对于第3和第4列的数据有必要事先把做点类型转换。

接下来,调用geneview中的曼哈顿图函数。import matplotlib.pyplot as plt

from geneview.gwas import manhattanplot

ax = manhattanplot(data, xlabel=”Chromosome”, ylabel=”-Log10(P-value)”) # 这就是Manhattan plot的函数

plt.show()

只需这样的一句代码就能创建一个漂亮的曼哈顿图,有必要再次指出的是,geneview是以matplotlib为基础开发出来的,所创建的图形对象实际上仍属于matplotlib,geneview内部自定义了很多图形风格,同时封装了大量只属于基因组数据的图表类型,但图形的输出格式以及界面显示都仍和matplotlib一样,因此在这里我们使用matplotlib.pyplot的show()函数(上例中:plt.show())将所绘制出来的曼哈顿图显示出来。如果要将图形保存下来,则只需执行`plt.savefig(“man.png”)`,这样就会在该目录下生成一个名为『man.png』png格式的曼哈顿图,若是要存为pdf格式,则只需将所要保存的文件名后缀改成『.pdf』(plt.savefig(“man.pdf”))就可以了。下面这些格式:emf, eps, pdf, png, jpg, ps, raw, rgba, svg, svgz等都是支持的,至于最新的还有多少种,还请参照matplotlib文档中说明。

此外,geneview中的每个画图函数都有着足够的灵活性,我们也可以根据自己的需要做一些调整,比如:xtick = [‘1’, ‘2’,’3′,’4′,’5′,’6′,’7′,’8′,’9′,’10’,’11’,’12’,’13’,’14’,’16’,’18’, ’20’,’22’]

manhattanplot(data,

xlabel=”Chromosome”, # 设置x轴名字

ylabel=”-Log10(P-value)”, # 设置y轴名字

xtick_label_set = set(xtick), # 限定横坐标轴上的刻度显示

s=40, # 设置图中散点的大小

alpha=0.5, # 调整散点透明度

color=”#f28b1e,#9a0dea,#ea0dcc,#63b8ff”, # 设置新的颜色组合

)

实现新的颜色组合、限定x轴上的刻度显示和散点大小的调节。甚至还可以将散点改为线:manhattanplot(data,

xlabel=”Chromosome”, # 设置x轴名字

ylabel=”-Log10(P-value)”, # 设置y轴名字

xtick_label_set = set(xtick), # 限定横坐标轴上的刻度显示

alpha=0.5, # 调整散点透明度

color=”#f28b1e,#9a0dea,#ea0dcc,#63b8ff”, # 设置新的颜色组合

kind=”line”

)

其它方面的调整请查看geneview文档中的相关说明。

Q-Q图

qq图只需用到上例中的pvalue那一列:import csv

import matplotlib.pyplot as plt

from geneview.gwas import qqplot

pvalue=[]

with open(“GOYA.csv”) as f:

f_csv = csv.reader(f)

headers = next(f_csv)

pvalue = [float(row[3]) for row in f_csv]

ax = qqplot(pvalue, color=”#00bb33″, xlabel=”Expected p-value(-log10)”,                  ylabel=”Observed p-value(-log10)”) # Q-Q 图

plt.show()

同样,也可以根据自己的需要对改图进行相关的调整。

以上,便是如何使用Python来制作Manhattan图和QQ图的方法,geneview的集成函数简化了这样的一个过程。

另外,如果你也看过丹麦人的这个GOYA研究,就会发现实际以上的两个图和其文章中的基本是一致的,当然我自己做了

些数据清洗的操作,结果上仍然会有些许的不同。虽然此刻下结论还有点为时尚早,但总的来讲,我应该也可以通过这个数据集比较顺利的将其结果重复出来了。

最后,附上利用geneview画曼哈顿图和QQ图的代码:

(1)曼哈顿图:import sys

import csv

import matplotlib.pyplot as plt

sys.path.append('..')

import geneview as gv

xtick = ['chr'+c for c in map(str, range(1, 15) + ['16', '18', '20', '22'])]

df = gv.util.load_dataset('GOYA_preview')

gv.gwas.manhattanplot(df[['chrID','position','pvalue']],

hline_kws={'y': 3, 'color': 'b', 'lw': 1},

xlabel="Chromosome",

ylabel="-Log10(P-value)",

xticklabel_kws={'rotation': 'vertical'},

xtick_label_set = set(xtick))

plt.savefig('manhattan.png')

plt.show()

(2)QQ图:import sys

import matplotlib.pyplot as plt

sys.path.append('..')

import geneview as gv

df = gv.util.load_dataset('GOYA_preview')

gv.gwas.qqplot(df['pvalue'])

"""

fig, ax = plt.subplots()

gv.gwas.qqplot(df['pvalue'], ax=ax,

xlabel="Expected p-value(-log10)",

ylabel="Observed p-value(-log10)")

"""

plt.savefig('qq.png')

plt.show()

python绘制基因结构图_使用Python绘制GWAS分析中的曼哈顿图和QQ图相关推荐

  1. python绘制基因结构图_从 gff 到 gggenes 绘制基因结构图

    gffutils 是一个用来解析 gff 文件的 Python 包,可以十分方便地获取 gff 文件中的相关信息.gggenes 是 ggplot2 的扩展包,用于绘制基因结构图.多物种基因比较图的很 ...

  2. python绘制基因结构图_Python调用graphviz绘制结构化图形网络示例

    安装完成后将安装目录的bin 路径加到系统路径中,有时候需要重启电脑. 然后: pip install graphviz import graphviz as gz 有向图 dot = gz.Digr ...

  3. 使用gsds绘制基因结构图_使用SnapGene viewer绘制比较基因簇结构图

    点击关注我 小编前期介绍了如何使用SnapGene viewer寻找酶切位点和设计引物, 你们学会了吗?(点击回顾前文) SnapGene viewer是一款专业的质粒图谱绘制软件,也可以绘制比较基因 ...

  4. python技术是什么_学 Python 都用来干嘛的?

    编程语言千千万万,不学python快乐少一半. 首先我们要明确一点,相比较于C语言,C++/Java等语言来说,python是比较适合普通人的一门语言. 如果说学编程是盖楼房,一个原始人要造现代化的房 ...

  5. python多元线性回归实例_利用Python进行数据分析之多元线性回归案例

    线性回归模型属于经典的统计学模型,该模型的应用场景是根据已知的变量(自变量)来预测某个连续的数值变量(因变量).例如,餐厅根据每天的营业数据(包括菜谱价格.就餐人数.预定人数.特价菜折扣等)预测就餐规 ...

  6. PP图,QQ 图,及 python 画图

    统计学中有时会用到 PP 图 或 QQ 图,用来看样本数据是否服从某一特定分布. 若 PP 或 QQ 图中的点基本落在一条 45度 的线上,则说明服从特定分布. 一般的步骤为: 将样本数据从小到大排序 ...

  7. python使用turtle库、绘制一个八边形_【Python】turtle八边形绘制

    [Python]turtle八边形绘制 ‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ ...

  8. python中plotly绘制树地图_聚类分析python画树状图--Plotly(dendrogram)用法解析 - 人人都是架构师...

    1.前言 聚类分析是机器学习和数据分析中非常常见的分类方法, 当我们用到层次聚类(系统聚类)时,最常用的分析方法就是绘制树状图, 比较常见的统计软件像SPSS.SAS.R等都可以直接绘制树状图,比较简 ...

  9. python七段数码管绘制单个数字_使用Python的turtle库实现七段数码管绘制

    七段数码管绘制: 七段数码管是由7段数码管拼接而成,每段有亮或不亮两种情况,改进的七段数码管还包括一个小数点位置. 七段数码管能形成2^7=128种状态,其中部分状态能够显示易于人们理解的数字或字母含 ...

最新文章

  1. 【Java】方法的重载 (求最大值方法的重载+求和的重载)
  2. python编程入门与案例详解pdf-Python爬虫天气预报实例详解(小白入门)
  3. android 挂载 nfs工具,Android 挂载 NFS
  4. Spark- Checkpoint原理剖析
  5. mysql反应慢_MySQL反应慢排查思路
  6. python面向对象编程(封装与继承)
  7. Codeforces Round #588 (Div. 2) D. Marcin and Training Camp 思维
  8. 应变界的翘楚:硅基谐振式传感器灵敏度非常高
  9. Android笔记 android 7.0 动态申请权限
  10. python //运算符
  11. 最新mysql数据库源码编译安装。
  12. 【最优化导论】一维搜索方法
  13. 国外知名广告联盟平台
  14. HDOJ1429(胜利大逃亡(续))
  15. 雷军与陈年是真爱 凡客即将“小米化”改造
  16. 【必读推荐】程序员的职业素养
  17. python函数**什么意思_python中函数的参数是什么意思
  18. “/”与“\”以及“//”与“\\”之间的区别 (转)
  19. 用css实现垂直水平居中的几种方法
  20. Verilog中generate语法和作用

热门文章

  1. zynq中mgtx应用_fpga,zynq
  2. 基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程]
  3. 全套国潮笔刷,插画绘画,美的方可万物
  4. 漫画:什么是数据仓库?
  5. arduino二位数码管_Arduino基础入门篇17—四位数码管的驱动
  6. vba中function(自定义函数)
  7. Web GIS多种方式发布动态地图服务及显示(3)
  8. POJ 1655 Balancing Act (树的重心 + DFS)
  9. cocos2d-x游戏《StopGMO》现阶段成品及代码发布
  10. oracle实战编程,Oracle Databa se 11g PL/SQL编程实战_IT教程网