查看原文
其他

一层一层的剥开你的圈

jimmy 生信技能树 2022-06-07

老规矩,Rmarkdown文章请直接点击阅读原文浏览更佳,8张图带你画懂圈圈图!

为了让圈圈图能一层层的添加,我用了一个很巧妙的方式,希望你能看懂!

每个图层对应的数据我都展示给大家看了,希望大家能明白学习的技巧,在脑海中有一个映射关系。什么样的数据映射到了圈圈上面!


我先讲解了画图,再讲解了一些小知识。

 安装并加载必须的packages

如果你还没有安装,就运行下面的代码安装:

install.packages('RCircos')
library(RCircos)

如果你安装好了,就直接加载它们即可

library(RCircos)

最基本的circos图

最基本的图,就是直接利用物种的染色体信息,展示出来即可

#导入内建人类染色体数据

data(UCSC.HG38.Human.CytoBandIdeogram)
cyto.info <- UCSC.HG38.Human.CytoBandIdeogram
RCircos.Set.Core.Components(cyto.info, chr.exclude=NULL,tracks.inside=10, tracks.outside=0 )
## ## RCircos.Core.Components initialized. ## Type ?RCircos.Reset.Plot.Parameters to see how to modify the core components.#chr.exclude <- NULL;           设置不显示的染色体,如 c(1,3)          
#cyto.info <- UCSC.HG19.Human.CytoBandIdeogram; 设置染色体数据
#tracks.inside <- 10;    设置内部track 个数
#tracks.outside <- 0;    设置外部track 个数

RCircos.Set.Plot.Area()RCircos.Chromosome.Ideogram.Plot()
#绘制染色体表意文字,染色体的默认方法亮点和染色体名称。

复杂化

在前面最基本的图的基础上面把circos复杂化,一步步添加到我们想要的信息。 ### 基础染色体信息 同上

#导入内建人类染色体数据a <- function(...){
data(UCSC.HG19.Human.CytoBandIdeogram);
head(UCSC.HG19.Human.CytoBandIdeogram);
## 这里换了个参考基因组版本,请注意 chr.exclude <- NULL;   #设置不显示的染色体,如 c(1,3)           cyto.info <- UCSC.HG19.Human.CytoBandIdeogram; #设置染色体数据 tracks.inside <- 10;   #设置内部track 个数 tracks.outside <- 0;   #设置外部track 个数 #导入上面四个基本参数 RCircos.Set.Core.Components(cyto.info, chr.exclude, tracks.inside, tracks.outside);
RCircos.Set.Plot.Area()

RCircos.Chromosome.Ideogram.Plot()}a()

#绘制染色体表意文字,染色体的默认方法亮点和染色体名称。

在基因组上面根据坐标标记基因

前面已经介绍过这个RCircos.Gene.Label.Data数据是什么了

b <- function(...){  a()  #Gene Labels and connectors on RCircos Plot  #RCircos.Gene.Connector.Plot   绘制染色体表意文字和基因名称之间的连接  #RCircos.Gene.Name.Plot 在数据轨道上绘制基因名称  data(RCircos.Gene.Label.Data);  
name.col <- 4;  
side <- "in";  
track.num <- 1;  RCircos.Gene.Connector.Plot(RCircos.Gene.Label.Data, track.num, side);  
track.num <- 2;  
RCircos.Gene.Name.Plot(RCircos.Gene.Label.Data, name.col,track.num, side);}

b()

用热图来标记基因组每个区域的数据

一般是拷贝数变异等数据,用RCircos.Heatmap.Plot函数绘制一个数据轨道的热图

data(RCircos.Heatmap.Data);head(RCircos.Heatmap.Data);##   Chromosome chromStart chromEnd GeneName  X786.O     A498 A549.ATCC ## 1       chr1     934341   935552     HES4 6.75781  7.38773   6.47890 ## 2       chr1     948846   949919    ISG15 7.56297 10.49590   5.89893 ## 3       chr1    1138887  1142089 TNFRSF18 4.69775  4.55593   4.38970 ## 4       chr1    1270657  1284492     DVL1 7.76886  7.52194   6.87125 ## 5       chr1    1288070  1293915    MXRA8 4.49805  4.72032   4.62207 ## 6       chr1    1592938  1624243 SLC35E2B 8.73104  8.10229   8.36599 ##      ACHN   BT.549  CAKI.1 ## 1 6.05517  8.85062 7.00307 ## 2 7.58095 12.08470 7.81459 ## 3 4.50064  4.47525 4.47721 ## 4 7.03517  7.65386 7.69733 ## 5 4.58575  5.66389 4.93499 ## 6 9.04116  9.24175 9.89727c <- function(...){    b()    data.col <- 6;    track.num <- 5;    side <- "in";    RCircos.Heatmap.Plot(RCircos.Heatmap.Data, data.col, track.num, side); }c()

加上散点图

用RCircos.Scatter.Plot函数来添加一个数据轨迹的扫描图

data(RCircos.Scatter.Data);head(RCircos.Scatter.Data);##   chromosome   start     stop num.mark seg.mean ## 1          1   61735   228706       18  -0.4459 ## 2          1  228729   356443       10   0.5624 ## 3          1  356542   564621        4  -0.9035 ## 4          1  603590  1704138      227   0.3545 ## 5          1 1709023  1711414        6   1.2565 ## 6          1 1714558 12862252     6276   0.4027d <- function(...){    c()    RCircos.Scatter.Data$chromosome=paste0('chr',RCircos.Scatter.Data$chromosome)    head(RCircos.Scatter.Data);    data.col <- 5;    track.num <- 6;    side <- "in";    by.fold <- 1;    RCircos.Scatter.Plot(RCircos.Scatter.Data, data.col,track.num, side, by.fold); }d()

 > 这个数据里面的染色体号码起初并没有加上’chr’,我做了个修改

加上直线

用RCircos.Line.Plot函数绘制线为一个数据轨道

data(RCircos.Line.Data);head(RCircos.Line.Data);##   chromosome    start     stop num.mark seg.mean ## 1          1    61735 16895627     8732   0.1797 ## 2          1 16896821 17212714      105  -0.2117 ## 3          1 17214822 25574471     5321   0.1751 ## 4          1 25574707 25662212       37   0.5064 ## 5          1 25663310 30741496     2400   0.1384 ## 6          1 30741656 30745210        3  -1.4742e <- function(...){    d()    RCircos.Line.Data$chromosome=paste0('chr',RCircos.Line.Data$chromosome)    head(RCircos.Line.Data);    data.col <- 5;    track.num <- 7;    side <- "in";    RCircos.Line.Plot(RCircos.Line.Data, data.col, track.num, side); }e()

加上直方图

这里用RCircos.Histogram.Plot 函数绘制一个数据轨迹的直方图

data(RCircos.Histogram.Data);head(RCircos.Histogram.Data);##   Chromosome chromStart chromEnd     Data ## 1       chr1   45000000 49999999 0.070859 ## 2       chr1   55000000 59999999 0.300460 ## 3       chr1   60000000 64999999 0.125421 ## 4       chr1   70000000 74999999 0.158156 ## 5       chr1   75000000 79999999 0.163540 ## 6       chr1   80000000 84999999 0.342921f <- function(...){    e()    data.col <- 4;    track.num <- 8;    side <- "in";    RCircos.Histogram.Plot(RCircos.Histogram.Data, data.col, track.num, side); }f()

给每个区间加上title

老实说,我觉得这一个圈圈没有必要绘

data(RCircos.Tile.Data);head(RCircos.Tile.Data)##   Chromosome chromStart  chromEnd ## 1       chr1          0  23900000 ## 2       chr1   12700000  44100000 ## 3       chr1   28000000  68900000 ## 4       chr1   59000000  94700000 ## 5       chr1   99700000 120600000 ## 6       chr1  147000000 234700000g <- function(...){    f()    track.num <- 9;    side <- "in";    RCircos.Tile.Plot(RCircos.Tile.Data, track.num, side); }g()

最后把有连接关系的基因连线

用RCircos.Link.Plot函数绘制两个或多个基因组位置之间的链接线,请自行查看RCircos.Link.Data数据是什么,如何映射到这个circos图上的。

data(RCircos.Link.Data);head(RCircos.Link.Data);##   Chromosome chromStart  chromEnd Chromosome.1 chromStart.1 chromEnd.1 ## 1       chr1    8284703   8285399         chr1      8285752    8286389 ## 2       chr1   85980143  85980624         chr7    123161313  123161687 ## 3       chr1  118069850 118070319         chr1    118070329  118070689 ## 4       chr1  167077258 167077658         chr1    169764630  169764965 ## 5       chr1  171671272 171671550         chr1    179790879  179791292 ## 6       chr1  174333479 174333875         chr6    101861516  101861840h <- function(...){    g()    track.num <- 11;    RCircos.Link.Plot(RCircos.Link.Data, track.num, TRUE);    data(RCircos.Ribbon.Data);    RCircos.Ribbon.Plot(ribbon.data=RCircos.Ribbon.Data, track.num=11, by.chromosome=FALSE, twist=FALSE) }h()

保存为PDF

这个需要具体设置,因为circos图占画布跟其它图不太一样

out.file <- "RCircosDemoHumanGenome.pdf";pdf(file=out.file, height=8, width=8, compress=TRUE);RCircos.Set.Plot.Area();par(mai=c(0.25, 0.25, 0.25, 0.25));plot.new();plot.window(c(-2.5,2.5), c(-2.5, 2.5));## 把circos图画在这里即可dev.off();

最后给一个sessionInfo()吧


sessionInfo()## R version 3.3.3 (2017-03-06) ## Platform: x86_64-apple-darwin13.4.0 (64-bit) ## Running under: macOS Sierra 10.12.4 ## ## locale: ## [1] C ## ## attached base packages: ## [1] stats     graphics  grDevices utils     datasets  methods   base     ## ## other attached packages: ## [1] RCircos_1.2.0 ## ## loaded via a namespace (and not attached): ##  [1] backports_1.0.5 magrittr_1.5    rprojroot_1.2   tools_3.3.3     ##  [5] htmltools_0.3.5 yaml_2.1.14     Rcpp_0.12.10    stringi_1.1.3   ##  [9] rmarkdown_1.4   knitr_1.15.1    stringr_1.2.0   digest_0.6.12   ## [13] evaluate_0.10

看看内置的测试数据

circos 本来是一个perl程序,专门用来genomic features在全基因组的分布,连接的。 所以输入数据必然要包含染色体,起始终止坐标的。 然后可以是一列value用来调色或者高度信息,可以加入基因名字等各种信息。 如果有两个genomic features的坐标信息,就是连接图啦。

下面是几个例子:

data(RCircos.Gene.Label.Data);head(RCircos.Gene.Label.Data);##   Chromosome chromStart chromEnd   Gene ## 1       chr1    8921418  8934967   ENO1 ## 2       chr1   17345375 17380514   SDHB ## 3       chr1   27022894 27107247 ARID1A ## 4       chr1   41976121 42501596 HIVEP3 ## 5       chr1   43803519 43818443    MPL ## 6       chr1   45794977 45805926  MUTYHdata(RCircos.Histogram.Data)head(RCircos.Histogram.Data)##   Chromosome chromStart chromEnd     Data ## 1       chr1   45000000 49999999 0.070859 ## 2       chr1   55000000 59999999 0.300460 ## 3       chr1   60000000 64999999 0.125421 ## 4       chr1   70000000 74999999 0.158156 ## 5       chr1   75000000 79999999 0.163540 ## 6       chr1   80000000 84999999 0.342921data(RCircos.Heatmap.Data)head(RCircos.Heatmap.Data)##   Chromosome chromStart chromEnd GeneName  X786.O     A498 A549.ATCC ## 1       chr1     934341   935552     HES4 6.75781  7.38773   6.47890 ## 2       chr1     948846   949919    ISG15 7.56297 10.49590   5.89893 ## 3       chr1    1138887  1142089 TNFRSF18 4.69775  4.55593   4.38970 ## 4       chr1    1270657  1284492     DVL1 7.76886  7.52194   6.87125 ## 5       chr1    1288070  1293915    MXRA8 4.49805  4.72032   4.62207 ## 6       chr1    1592938  1624243 SLC35E2B 8.73104  8.10229   8.36599 ##      ACHN   BT.549  CAKI.1 ## 1 6.05517  8.85062 7.00307 ## 2 7.58095 12.08470 7.81459 ## 3 4.50064  4.47525 4.47721 ## 4 7.03517  7.65386 7.69733 ## 5 4.58575  5.66389 4.93499 ## 6 9.04116  9.24175 9.89727data(RCircos.Link.Data)head(RCircos.Link.Data)##   Chromosome chromStart  chromEnd Chromosome.1 chromStart.1 chromEnd.1 ## 1       chr1    8284703   8285399         chr1      8285752    8286389 ## 2       chr1   85980143  85980624         chr7    123161313  123161687 ## 3       chr1  118069850 118070319         chr1    118070329  118070689 ## 4       chr1  167077258 167077658         chr1    169764630  169764965 ## 5       chr1  171671272 171671550         chr1    179790879  179791292 ## 6       chr1  174333479 174333875         chr6    101861516  101861840

熟悉物种的染色体信息

就是很简单染色体的每个片段的起始终止坐标信息,取决于物种还有它对应的参考基因组版本

data(UCSC.HG19.Human.CytoBandIdeogram);head(UCSC.HG19.Human.CytoBandIdeogram);##   Chromosome ChromStart ChromEnd   Band  Stain ## 1       chr1          0  2300000 p36.33   gneg ## 2       chr1    2300000  5400000 p36.32 gpos25 ## 3       chr1    5400000  7200000 p36.31   gneg ## 4       chr1    7200000  9200000 p36.23 gpos25 ## 5       chr1    9200000 12700000 p36.22   gneg ## 6       chr1   12700000 16200000 p36.21 gpos50data(UCSC.Mouse.GRCm38.CytoBandIdeogram);
head(UCSC.Mouse.GRCm38.CytoBandIdeogram);
##   Chromosome ChromStart ChromEnd Band   Stain ## 1       chr1          0  8840440  qA1 gpos100 ## 2       chr1    8840440 12278390  qA2    gneg ## 3       chr1   12278390 20136559  qA3  gpos33 ## 4       chr1   20136559 22101102  qA4    gneg ## 5       chr1   22101102 30941543  qA5 gpos100 ## 6       chr1   30941543 43219933   qB    gnegdata(UCSC.Baylor.3.4.Rat.cytoBandIdeogram);
head(UCSC.Baylor.3.4.Rat.cytoBandIdeogram);
##   Chromosome ChromStart ChromEnd Band Stain ## 1       chr1          0 10142096  p13  gneg ## 2       chr1   10142096 24272657  p12  gvar ## 3       chr1   24272657 38517175  p11  gneg ## 4       chr1   38517175 48659271  q11  gpos ## 5       chr1   48659271 69741157  q12  gneg ## 6       chr1   69741157 90025350  q21  gpos

参数列表如下;

rcircos.params <- RCircos.Get.Plot.Parameters();
rcircos.cyto <- RCircos.Get.Plot.Ideogram();
rcircos.position <- RCircos.Get.Plot.Positions();
RCircos.List.Plot.Parameters()
## Parameters for current RCircos session. ## ## Parameters in inch: ## ============================== ## radius.len:      1.84 ## chr.ideo.pos:        1.94 ## highlight.pos:       2.09 ## chr.name.pos:        2.14 ## plot.radius:     2.64 ## track.in.start:      1.89 ## track.out.start: 2.49 ## chrom.width:     0.1 ## track.padding:       0.02 ## track.height:        0.1 ## ## Parameters in chromosome unit: ## ============================== ## base.per.unit:       30000 ## chrom.paddings:      300 ## heatmap.width:       100 ## hist.width:      100 ## gene name char. width:   500 ## ## General R graphic parameters: ## ============================== ## text.size:       0.4 ## highlight.width: 2 ## point.type:      . ## point.size:      1 ## text.color:      black ## heatmap.color:       BlueWhiteRed ## hist.color:      red ## line.color:      black ## scatter.color:       black ## tile.color:      black ## track.background:    wheat ## grid.line.color: gray ## Bezier.point:        1000 ## max.layers:      5 ## sub.tracks:      5 ## ## Data track numbers: ## ============================== ## tracks.inside:       10 ## tracks.outside:      0## Following are procedures to change RCircos plot parameters: ## params <- RCircos.Get.Plot.Parameters(); ## params$radius.len <- 2.0; ## params$base.per.unit <- 5000; ## RCircos.Reset.Plot.Parameters(params) ## ## Chromosome ideogram data were automatically modified.

可以看出一个circos图由上面3个部分组成,如下:

  • RCircos cytoband data

  • RCircos plot positions

  • RCircos plot parameters(最复杂啦

每个部分都可以单独调整细节:

params <- RCircos.Get.Plot.Parameters();  
#获得参数列表

params$radius.len <- 2.0;                                    
#更改其中的参数            

params$base.per.unit <- 5000;                            
#更改其中的参数            

RCircos.Reset.Plot.Parameters(params)     #参数重置

快分享给你的小伙伴吧,免得他/她妈妈担心

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存