Circos圖是在基因組相關(guān)的分析結(jié)果展示中非常常見的一類圖型。由于Circos圖中展示的信息量大,圖形十分美觀,很多文章中都會繪制類似的圖形。從圖形的內(nèi)容來看,Circos圖實際是將多個類型的圖片,包括散點圖、直方圖、折線圖、熱圖等,經(jīng)過變形以后疊加顯示在染色體上。本質(zhì)上是多個圖形的組合。
在R語言中,RCircos這個軟件包可以實現(xiàn)快速生成Circos圖片。接下來,我們就來看看怎樣用R來繪制圈圖。
1、基礎(chǔ)繪圖
# 加載RCicos,如果第一次使用,需要先安裝
install.packages('RCircos')
# 讀取R包
library(RCircos)
# 導(dǎo)入內(nèi)建人類染色體數(shù)據(jù)
data(UCSC.HG38.Human.CytoBandIdeogram)
# 數(shù)據(jù)內(nèi)容如上圖;第一列?染色體編號;第二列?染色體片段起始位點;第三列?染色體片段結(jié)束位點;第四列?染色體片段編號;第五列?染色體片段顏色
# 這個數(shù)據(jù)是RCicos內(nèi)置的人類染色體信息,第四列和第五列信息用于展示染色體的核型??梢允÷浴?/span>
#?設(shè)置染色體數(shù)據(jù)
cyto.info?<-?UCSC.HG38.Human.CytoBandIdeogram
RCircos.Set.Core.Components(cyto.info,?chr.exclude=NULL,tracks.inside=10,?tracks.outside=0?)
# chr.exclude=NULL;??設(shè)置不顯示的染色體,如?c(1,3)??????????
# tracks.inside=10;??設(shè)置內(nèi)部環(huán)形個數(shù)
# tracks.outside=0;???設(shè)置外部環(huán)形個數(shù)??
#?繪制染色體圖形,默認方法顯示染色體名稱。
RCircos.Set.Plot.Area()?????
RCircos.Chromosome.Ideogram.Plot()?
這樣僅包含染色體的圈圖就生成了:
2、繪制包含數(shù)據(jù)的圖形
#?導(dǎo)入內(nèi)建人類染色體數(shù)據(jù)
data(UCSC.HG19.Human.CytoBandIdeogram);
#設(shè)置不顯示的染色體,如?c(1,3)???
chr.exclude?<-?NULL;?
#設(shè)置染色體數(shù)據(jù)
cyto.info?<-?UCSC.HG19.Human.CytoBandIdeogram;?
#設(shè)置內(nèi)部環(huán)形個數(shù)
tracks.inside?<-?10;?
#設(shè)置外部環(huán)形個數(shù)
tracks.outside?<-?0;?
#?導(dǎo)入上面四個基本參數(shù)
RCircos.Set.Core.Components(cyto.info,?chr.exclude,?tracks.inside,?tracks.outside);
#?列出所有繪圖參數(shù)
RCircos.List.Plot.Parameters()
#?定義要生成的圖像文件
pdf(file="RCircosDemoHumanGenome",?height=8,?width=8,?compress=TRUE);
RCircos.Set.Plot.Area();
#?height和width指定生成圖片的長和寬,compress指定生成的圖片是否需要壓縮
#?繪制染色體圖形
RCircos.Chromosome.Ideogram.Plot();
3、染色體上添加基因名稱與連線
# 加載內(nèi)置的RCircos.Gene.Label.Data數(shù)據(jù)集
#?數(shù)據(jù)內(nèi)容如上圖,第一列?染色體編號,需要與第一步導(dǎo)入的染色體數(shù)據(jù)一致;第二列?基因在染色體片段起始位點;第三列?基因在染色體片段結(jié)束位點;第四列?基因名
#?指定內(nèi)容在內(nèi)側(cè)的環(huán)形還是外側(cè)的環(huán)形生成
side?<-?"in";
#?指定內(nèi)容在第幾個環(huán)形生成
track.num?<-?1;
#?繪圖
RCircos.Gene.Connector.Plot(RCircos.Gene.Label.Data,?track.num,?side);
#?在染色體上添加基因名稱,?指定內(nèi)容在第幾個環(huán)形生成
name.col?<-?4;
#?指定基因名在數(shù)據(jù)的第幾列
track.num?<-?2;
#?繪圖
RCircos.Gene.Name.Plot(RCircos.Gene.Label.Data,?name.col,track.num,?side);
4、添加熱圖類型的環(huán)形
data(RCircos.Heatmap.Data);
#?這個數(shù)據(jù)集中是6個不同樣本的基因表達量數(shù)據(jù),數(shù)據(jù)內(nèi)容如上圖,第一列?染色體編號,需要與第一步導(dǎo)入的染色體數(shù)據(jù)一致;第二列?基因在染色體片段起始位點;第三列?基因在染色體片段結(jié)束位點;第四列?基因名;第五列及以后?基因在不同樣本中的表達量
#?指定以第6列數(shù)據(jù)生成熱圖
data.col?<-?6;
#?指定內(nèi)容在第5個環(huán)形生成
track.num?<-?5;
#?指定內(nèi)容在內(nèi)側(cè)的環(huán)形生成
side?<-?"in";
#?繪圖
RCircos.Heatmap.Plot(RCircos.Heatmap.Data,?data.col,?track.num,?side);
5、添加散點圖類型的環(huán)形
data(RCircos.Scatter.Data);
#?這個數(shù)據(jù)集是拷貝數(shù)變異的數(shù)據(jù),數(shù)據(jù)內(nèi)容如上圖,第一列?染色體編號,需要與第一步導(dǎo)入的染色體數(shù)據(jù)一致;第二列?突變位點在染色體片段起始位點;第三列?突變位點在染色體片段結(jié)束位點;第四列?突變位點拷貝數(shù);第五列?突變平均置信度
#?指定以第5列數(shù)據(jù)圖形中散點縱坐標
data.col?<-?5;
#?指定圖形在第6個環(huán)形生成
track.num?<-?6;
#?指定圖形在內(nèi)側(cè)環(huán)形生成
side?<-?"in";
#?指定數(shù)據(jù)大于1的點以紅色顯示,小于數(shù)據(jù)1的點以藍色顯示
by.fold?<-?1;
#?繪圖
RCircos.Scatter.Plot(RCircos.Scatter.Data,?data.col,track.num,?side,?by.fold);
6、添加折線圖類型的環(huán)形
data(RCircos.Line.Data);
# 由于這個數(shù)據(jù)集的染色體編號與第一步導(dǎo)入的染色體數(shù)據(jù)不一致,需要在編號前添加chr
RCircos.Line.Data$chromosome?<-?paste(‘chr’,RCircos.Line.Data$chromosome,sep?=?”)
#?指定以第5列數(shù)據(jù)做為圖形中拆線的縱坐標
data.col?<-?5;
#?指定圖形在第7個環(huán)形生成
track.num?<-?7;
#?指定圖形在內(nèi)側(cè)環(huán)形生成
side?<-?"in";
#?繪圖
RCircos.Line.Plot(RCircos.Line.Data,?data.col,?track.num,?side);
7、添加直方圖類型的環(huán)形
# 加載內(nèi)置的RCircos.Histogram.Data數(shù)據(jù)集
data(RCircos.Histogram.Data);
#?這個數(shù)據(jù)集是染色體片段突變頻率的數(shù)據(jù),數(shù)據(jù)內(nèi)容如上圖,第一列?染色體編號;第二列?染色體片段起始位點;第三列?染色體片段結(jié)束位點;第四列?染色體片段突變頻率
#?指定以第4列數(shù)據(jù)做為圖形中直方的縱坐標
data.col?<-?4;
#?指定圖形在第8個環(huán)形生成
track.num?<-?8;
#?指定圖形在內(nèi)側(cè)環(huán)形生成
side?<-?"in";
#?繪圖
RCircos.Histogram.Plot(RCircos.Histogram.Data,?data.col,?track.num,?side);
8、添加網(wǎng)絡(luò)圖類型的環(huán)形
# 加載內(nèi)置的RCircos.Tile.Data數(shù)據(jù)集
data(RCircos.Tile.Data);
#?數(shù)據(jù)內(nèi)容如上圖,第一列?染色體編號;第二列?需要繪制的網(wǎng)格在染色體片段的起始位點;第三列?需要繪制的網(wǎng)格在染色體片段的結(jié)束位點
#?指定圖形在第9個環(huán)形生成
track.num?<-?9;
#?指定圖形在內(nèi)側(cè)環(huán)形生成
side?<-?"in";
#?繪圖
RCircos.Tile.Plot(RCircos.Tile.Data,?track.num,?side);
9、添加一個或多個基因間的聯(lián)系曲線
# 加載內(nèi)置的RCircos.Link.Data數(shù)據(jù)集
data(RCircos.Link.Data);
#?數(shù)據(jù)內(nèi)容如上圖,第一列?染色體編號;第二列?聯(lián)系位點在染色體片段的起始位點;第三列?聯(lián)系位點在染色體片段的結(jié)束位點;第四列?聯(lián)系位點在所在的另一個染色體編號;第五列?聯(lián)系位點在所在的另一個染色體片段的起始位點;第六列?聯(lián)系位點在所在的另一個染色體片段的結(jié)束位點
#?指定圖形在第11個環(huán)形生成
track.num?<-?11;
#?繪圖
RCircos.Link.Plot(RCircos.Link.Data,?track.num,?TRUE);
#?加載內(nèi)置的RCircos.Ribbon.Data數(shù)據(jù)集
data(RCircos.Ribbon.Data);
#?繪圖
RCircos.Ribbon.Plot(ribbon.data=RCircos.Ribbon.Data,?track.num=11,?by.chromosome=FALSE,?twist=FALSE);
#?繪圖完成之后關(guān)閉圖形設(shè)備,保存圖片??梢栽诠ぷ髂夸浵抡业缴傻膱D片,默認是PDF格式?
dev.off();
最終繪圖效果如下圖:
以上就是一個使用數(shù)據(jù)生成多個環(huán)形組合圖的過程。我們還可以根據(jù)自己的需要添加更多的類似圖形。只需要保證數(shù)據(jù)的結(jié)構(gòu)一致即可。同樣,也可以以上面的代碼為模板,把其它數(shù)據(jù)代換進去生成全新圖片。
如果您對這個繪圖還有其他問題,歡迎點擊下方按鈕聯(lián)系我們,我們將免費為您設(shè)計文章思路方案。