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