扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
曼哈顿图和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
第三种办法就是直接下载源码,然后自行编译,虽然不推荐这种做法(因为还有依赖包必须自行下载安装,过程会比较麻烦低效),但对于某些不能连接外网的集群也只能如此,这三种方式都是可行的。
曼哈顿图
将示例数据下载下来:
wget 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的集成函数简化了这样的一个过程。
曼哈顿图
将示例数据下载下来:
wget
先简单地查看一下数据的格式:
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)曼哈顿图:
(2)QQ图:
1,xlable,ylable设置x,y轴的标题文字。
2,title设置标题。
3,xlim,ylim设置x,y轴显示范围。
plt.show()显示绘图窗口,通常情况下,show()会阻碍程序运行,带-wthread等参数的环境下,窗口不会关闭。
plt.saveFig()保存图像。
面向对象绘图
1,当前图表和子图可以用gcf(),gca()获得。
subplot()绘制包含多个图表的子图。
configure subplots,可调节子图与图表边框距离。
可以通过修改配置文件更改对象属性。
图标显示中文
1,在程序中直接指定字体。
2, 在程序开始修改配置字典reParams.
3,修改配置文件。
Artist对象
1,图标的绘制领域。
2,如何在FigureCanvas对象上绘图。
3,如何使用Renderer在FigureCanvas对象上绘图。
FigureCanvas和Render处理底层图像操作,Artist处理高层结构。
分为简单对象和容器对象,简单的Aritist是标准的绘图元件,例如Line 2D,Rectangle,Text,AxesImage等,而容器类型包含许多简单的的 Aritist对象,使他们构成一个整体,例如Axis,Axes,Figure等。
直接创建Artist对象进项绘图操作步奏:
1,创建Figure对象(通过figure()函数,会进行许多初始化操作,不建议直接创建。)
2,为Figure对象创建一个或多个Axes对象。
3,调用Axes对象的方法创建各类简单的Artist对象。
Figure容器
如何找到指定的Artist对象。
1,可调用add_subplot()和add_axes()方法向图表添加子图。
2,可使用for循环添加栅格。
3,可通过transform修改坐标原点。
Axes容器
1,patch修改背景。
2,包含坐标轴,坐标网格,刻度标签,坐标轴标题等内容。
3,get_ticklabels(),,get-ticklines获得刻度标签和刻度线。
1,可对曲线进行插值。
2,fill_between()绘制交点。
3,坐标变换。
4,绘制阴影。
5,添加注释。
1,绘制直方图的函数是
2,箱线图(Boxplot)也称箱须图(Box-whisker Plot),是利用数据中的五个统计量:最小值、第一四分位
数、中位数、第三四分位数与最大值来描述数据的一种方法,它可以粗略地看出数据是否具有对称性以及分
布的分散程度等信息,特别可以用于对几个样本的比较。
3,饼图就是把一个圆盘按所需表达变量的观察数划分为若干份,每一份的角度(即面积)等价于每个观察
值的大小。
4,散点图
5,QQ图
低层绘图函数
类似于barplot(),dotchart()和plot()这样的函数采用低层的绘图函数来画线和点,来表达它们在页面上放置的位置以及其他各种特征。
在这一节中,我们会描述一些低层的绘图函数,用户也可以调用这些函数用于绘图。首先我们先讲一下R怎么描述一个页面;然后我们讲怎么在页面上添加点,线和文字;最后讲一下怎么修改一些基本的图形。
绘图区域与边界
R在绘图时,将显示区域划分为几个部分。绘制区域显示了根据数据描绘出来的图像,在此区域内R根据数据选择一个坐标系,通过显示出来的坐标轴可以看到R使用的坐标系。在绘制区域之外是边沿区,从底部开始按顺时针方向分别用数字1到4表示。文字和标签通常显示在边沿区域内,按照从内到外的行数先后显示。
添加对象
在绘制的图像上还可以继续添加若干对象,下面是几个有用的函数,以及对其功能的说明。
•points(x, y, ...),添加点
•lines(x, y, ...),添加线段
•text(x, y, labels, ...),添加文字
•abline(a, b, ...),添加直线y=a+bx
•abline(h=y, ...),添加水平线
•abline(v=x, ...),添加垂直线
•polygon(x, y, ...),添加一个闭合的多边形
•segments(x0, y0, x1, y1, ...),画线段
•arrows(x0, y0, x1, y1, ...),画箭头
•symbols(x, y, ...),添加各种符号
•legend(x, y, legend, ...),添加图列说明
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流