曼哈頓圖和QQ圖是兩個在全基因組關(guān)聯(lián)(GWAS)分析里面最常出現(xiàn)的圖形,基本上已經(jīng)是GWAS的標配,幾乎在每篇GWAS的文章都會見到,它們的作用和所要傳達出來的信息我也在上一篇關(guān)于GWAS的博文中做了些說明,在這里我們就只集中在如何用Python和geneview將其有效地展現(xiàn)出來。

成都創(chuàng)新互聯(lián)公司專注于龍口網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供龍口營銷型網(wǎng)站建設(shè),龍口網(wǎng)站制作、龍口網(wǎng)頁設(shè)計、龍口網(wǎng)站官網(wǎng)定制、小程序制作服務(wù),打造龍口網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供龍口網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
首先,準備一些數(shù)據(jù)來作為例子。
我這里用來展現(xiàn)的數(shù)據(jù)是2011年丹麥人所做過的一個關(guān)于年輕人過度肥胖的GWAS研究——GOYA,數(shù)據(jù)也是從他們所發(fā)表的結(jié)果中獲得,總共有5,373個樣本,其中超重的個體(case)有2,633個,正常的個體(control)是2,740個,從樣本量上看還算可以。為了方便使用,我對其做了相關(guān)的處理,包括從PED和MAP文件到GEN文件的生成,并重復(fù)了一次case-control的關(guān)聯(lián)性分析,計算出了芯片上所研究的各個SNP位點與肥胖相關(guān)的顯著性程度(即p-value),最后又將結(jié)果數(shù)據(jù)抽取出來做成數(shù)據(jù)集——放在這里供下載(15.6Mb,csv格式)。
【注】以上內(nèi)容雖提及到了一些領(lǐng)域內(nèi)術(shù)語和相關(guān)文件格式,但若不懂也請不必糾結(jié),因為后續(xù)處理都是基于這個最終的數(shù)據(jù)集來完成的。
接著,需要將geneview軟件包加入到你的Python中,有多種不同的方式,但推薦直接使用pip,以下是安裝比較穩(wěn)定的發(fā)布版,直接在終端命令行下(Linux or Mac)輸入:
pip install geneview
第三種辦法就是直接下載源碼,然后自行編譯,雖然不推薦這種做法(因為還有依賴包必須自行下載安裝,過程會比較麻煩低效),但對于某些不能連接外網(wǎng)的集群也只能如此,這三種方式都是可行的。
曼哈頓圖
將示例數(shù)據(jù)下載下來:
wget data/master/GOYA.csv
先簡單地查看一下數(shù)據(jù)的格式:
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。
下面先從繪制曼哈頓圖開始。我們先將需要的數(shù)據(jù)讀取到一個列表中,可以這樣做:
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]
現(xiàn)在GOYA.csv中的數(shù)據(jù)就都存放在data列表中了,由于Python在讀取文件中數(shù)據(jù)時,都是以string類型存放,因此對于第3和第4列的數(shù)據(jù)有必要事先把做點類型轉(zhuǎn)換。
接下來,調(diào)用geneview中的曼哈頓圖函數(shù)。
import matplotlib.pyplot as plt
from geneview.gwas import manhattanplot
ax = manhattanplot(data, xlabel="Chromosome", ylabel="-Log10(P-value)") # 這就是Manhattan plot的函數(shù)
plt.show()
只需這樣的一句代碼就能創(chuàng)建一個漂亮的曼哈頓圖,有必要再次指出的是,geneview是以matplotlib為基礎(chǔ)開發(fā)出來的,所創(chuàng)建的圖形對象實際上仍屬于matplotlib,geneview內(nèi)部自定義了很多圖形風格,同時封裝了大量只屬于基因組數(shù)據(jù)的圖表類型,但圖形的輸出格式以及界面顯示都仍和matplotlib一樣,因此在這里我們使用matplotlib.pyplot的show()函數(shù)(上例中:plt.show())將所繪制出來的曼哈頓圖顯示出來。如果要將圖形保存下來,則只需執(zhí)行`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中的每個畫圖函數(shù)都有著足夠的靈活性,我們也可以根據(jù)自己的需要做一些調(diào)整,比如:
xtick = ['1', '2','3','4','5','6','7','8','9','10','11','12','13','14','16','18', '20','22']
manhattanplot(data,
xlabel="Chromosome", # 設(shè)置x軸名字
ylabel="-Log10(P-value)", # 設(shè)置y軸名字
xtick_label_set = set(xtick), # 限定橫坐標軸上的刻度顯示
s=40, # 設(shè)置圖中散點的大小
alpha=0.5, # 調(diào)整散點透明度
color="#f28b1e,#9a0dea,#ea0dcc,#63b8ff", # 設(shè)置新的顏色組合
)
實現(xiàn)新的顏色組合、限定x軸上的刻度顯示和散點大小的調(diào)節(jié)。甚至還可以將散點改為線:
manhattanplot(data,
xlabel="Chromosome", # 設(shè)置x軸名字
ylabel="-Log10(P-value)", # 設(shè)置y軸名字
xtick_label_set = set(xtick), # 限定橫坐標軸上的刻度顯示
alpha=0.5, # 調(diào)整散點透明度
color="#f28b1e,#9a0dea,#ea0dcc,#63b8ff", # 設(shè)置新的顏色組合
kind="line"
)
其它方面的調(diào)整請查看geneview文檔中的相關(guān)說明。
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()
同樣,也可以根據(jù)自己的需要對改圖進行相關(guān)的調(diào)整。
以上,便是如何使用Python來制作Manhattan圖和QQ圖的方法,geneview的集成函數(shù)簡化了這樣的一個過程。
曼哈頓圖
將示例數(shù)據(jù)下載下來:
wget
先簡單地查看一下數(shù)據(jù)的格式:
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。
下面先從繪制曼哈頓圖開始。我們先將需要的數(shù)據(jù)讀取到一個列表中,可以這樣做:
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]
現(xiàn)在GOYA.csv中的數(shù)據(jù)就都存放在data列表中了,由于Python在讀取文件中數(shù)據(jù)時,都是以string類型存放,因此對于第3和第4列的數(shù)據(jù)有必要事先把做點類型轉(zhuǎn)換。
接下來,調(diào)用geneview中的曼哈頓圖函數(shù)。
import matplotlib.pyplot as plt
from geneview.gwas import manhattanplot
ax = manhattanplot(data, xlabel="Chromosome", ylabel="-Log10(P-value)") # 這就是Manhattan plot的函數(shù)
plt.show()
只需這樣的一句代碼就能創(chuàng)建一個漂亮的曼哈頓圖,有必要再次指出的是,geneview是以matplotlib為基礎(chǔ)開發(fā)出來的,所創(chuàng)建的圖形對象實際上仍屬于matplotlib,geneview內(nèi)部自定義了很多圖形風格,同時封裝了大量只屬于基因組數(shù)據(jù)的圖表類型,但圖形的輸出格式以及界面顯示都仍和matplotlib一樣,因此在這里我們使用matplotlib.pyplot的show()函數(shù)(上例中:plt.show())將所繪制出來的曼哈頓圖顯示出來。如果要將圖形保存下來,則只需執(zhí)行`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中的每個畫圖函數(shù)都有著足夠的靈活性,我們也可以根據(jù)自己的需要做一些調(diào)整,比如:
xtick = ['1', '2','3','4','5','6','7','8','9','10','11','12','13','14','16','18', '20','22']
manhattanplot(data,
xlabel="Chromosome", # 設(shè)置x軸名字
ylabel="-Log10(P-value)", # 設(shè)置y軸名字
xtick_label_set = set(xtick), # 限定橫坐標軸上的刻度顯示
s=40, # 設(shè)置圖中散點的大小
alpha=0.5, # 調(diào)整散點透明度
color="#f28b1e,#9a0dea,#ea0dcc,#63b8ff", # 設(shè)置新的顏色組合
)
實現(xiàn)新的顏色組合、限定x軸上的刻度顯示和散點大小的調(diào)節(jié)。甚至還可以將散點改為線:
manhattanplot(data,
xlabel="Chromosome", # 設(shè)置x軸名字
ylabel="-Log10(P-value)", # 設(shè)置y軸名字
xtick_label_set = set(xtick), # 限定橫坐標軸上的刻度顯示
alpha=0.5, # 調(diào)整散點透明度
color="#f28b1e,#9a0dea,#ea0dcc,#63b8ff", # 設(shè)置新的顏色組合
kind="line"
)
其它方面的調(diào)整請查看geneview文檔中的相關(guān)說明。
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()
同樣,也可以根據(jù)自己的需要對改圖進行相關(guān)的調(diào)整。
以上,便是如何使用Python來制作Manhattan圖和QQ圖的方法,geneview的集成函數(shù)簡化了這樣的一個過程。
另外,如果你也看過丹麥人的這個GOYA研究,就會發(fā)現(xiàn)實際以上的兩個圖和其文章中的基本是一致的,當然我自己做了些數(shù)據(jù)清洗的操作,結(jié)果上仍然會有些許的不同。雖然此刻下結(jié)論還有點為時尚早,但總的來講,我應(yīng)該也可以通過這個數(shù)據(jù)集比較順利的將其結(jié)果重復(fù)出來了。
最后,附上利用geneview畫曼哈頓圖和QQ圖的代碼:
(1)曼哈頓圖:
(2)QQ圖:
1,xlable,ylable設(shè)置x,y軸的標題文字。
2,title設(shè)置標題。
3,xlim,ylim設(shè)置x,y軸顯示范圍。
plt.show()顯示繪圖窗口,通常情況下,show()會阻礙程序運行,帶-wthread等參數(shù)的環(huán)境下,窗口不會關(guān)閉。
plt.saveFig()保存圖像。
面向?qū)ο罄L圖
1,當前圖表和子圖可以用gcf(),gca()獲得。
subplot()繪制包含多個圖表的子圖。
configure subplots,可調(diào)節(jié)子圖與圖表邊框距離。
可以通過修改配置文件更改對象屬性。
圖標顯示中文
1,在程序中直接指定字體。
2, 在程序開始修改配置字典reParams.
3,修改配置文件。
Artist對象
1,圖標的繪制領(lǐng)域。
2,如何在FigureCanvas對象上繪圖。
3,如何使用Renderer在FigureCanvas對象上繪圖。
FigureCanvas和Render處理底層圖像操作,Artist處理高層結(jié)構(gòu)。
分為簡單對象和容器對象,簡單的Aritist是標準的繪圖元件,例如Line 2D,Rectangle,Text,AxesImage等,而容器類型包含許多簡單的的 Aritist對象,使他們構(gòu)成一個整體,例如Axis,Axes,Figure等。
直接創(chuàng)建Artist對象進項繪圖操作步奏:
1,創(chuàng)建Figure對象(通過figure()函數(shù),會進行許多初始化操作,不建議直接創(chuàng)建。)
2,為Figure對象創(chuàng)建一個或多個Axes對象。
3,調(diào)用Axes對象的方法創(chuàng)建各類簡單的Artist對象。
Figure容器
如何找到指定的Artist對象。
1,可調(diào)用add_subplot()和add_axes()方法向圖表添加子圖。
2,可使用for循環(huán)添加柵格。
3,可通過transform修改坐標原點。
Axes容器
1,patch修改背景。
2,包含坐標軸,坐標網(wǎng)格,刻度標簽,坐標軸標題等內(nèi)容。
3,get_ticklabels(),,get-ticklines獲得刻度標簽和刻度線。
1,可對曲線進行插值。
2,fill_between()繪制交點。
3,坐標變換。
4,繪制陰影。
5,添加注釋。
1,繪制直方圖的函數(shù)是
2,箱線圖(Boxplot)也稱箱須圖(Box-whisker Plot),是利用數(shù)據(jù)中的五個統(tǒng)計量:最小值、第一四分位
數(shù)、中位數(shù)、第三四分位數(shù)與最大值來描述數(shù)據(jù)的一種方法,它可以粗略地看出數(shù)據(jù)是否具有對稱性以及分
布的分散程度等信息,特別可以用于對幾個樣本的比較。
3,餅圖就是把一個圓盤按所需表達變量的觀察數(shù)劃分為若干份,每一份的角度(即面積)等價于每個觀察
值的大小。
4,散點圖
5,QQ圖
低層繪圖函數(shù)
類似于barplot(),dotchart()和plot()這樣的函數(shù)采用低層的繪圖函數(shù)來畫線和點,來表達它們在頁面上放置的位置以及其他各種特征。
在這一節(jié)中,我們會描述一些低層的繪圖函數(shù),用戶也可以調(diào)用這些函數(shù)用于繪圖。首先我們先講一下R怎么描述一個頁面;然后我們講怎么在頁面上添加點,線和文字;最后講一下怎么修改一些基本的圖形。
繪圖區(qū)域與邊界
R在繪圖時,將顯示區(qū)域劃分為幾個部分。繪制區(qū)域顯示了根據(jù)數(shù)據(jù)描繪出來的圖像,在此區(qū)域內(nèi)R根據(jù)數(shù)據(jù)選擇一個坐標系,通過顯示出來的坐標軸可以看到R使用的坐標系。在繪制區(qū)域之外是邊沿區(qū),從底部開始按順時針方向分別用數(shù)字1到4表示。文字和標簽通常顯示在邊沿區(qū)域內(nèi),按照從內(nèi)到外的行數(shù)先后顯示。
添加對象
在繪制的圖像上還可以繼續(xù)添加若干對象,下面是幾個有用的函數(shù),以及對其功能的說明。
?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, ...),添加圖列說明
網(wǎng)站欄目:pythonqq圖函數(shù),python 圖
文章分享:http://chinadenli.net/article33/dsidgss.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站、自適應(yīng)網(wǎng)站、服務(wù)器托管、云服務(wù)器、網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)