我虽然写了中文解读,还是建议大家看原作者的英文文档

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

 安装并加载必须的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.89727
c <- 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.4027
d <- 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.4742
e <- 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.342921
f <- 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 234700000
g <- 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  101861840
h <- 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()