用RCircos包来画圈圈图

我先讲解了画图,再讲解了一些小知识。安装并加载必须的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()


保存为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  MUTYH
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
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
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
熟悉物种的染色体信息
就是很简单染色体的每个片段的起始终止坐标信息,取决于物种还有它对应的参考基因组版本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 gpos50
data(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    gneg
data(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)     #参数重置

用RCircos包来画圈圈图相关推荐

  1. python画画零基础_[零基础学python]画圈还不简单吗?

    画圈?换一个说法就是循环.循环,是高级语言编程中重要的工作.现实生活中,很多事情都是在循环,日月更迭,斗转星移,无不是循环:王朝更迭,寻常百姓,也都是循环. 在python中,循环有一个语句:for语 ...

  2. 688:画圈游戏(思维)

    688: 画圈游戏 时间限制: 1 Sec 内存限制: 128 MB [提交][状态][讨论版] 题目描述 有一天,小乐和小希在玩游戏,游戏规则是这样的,有一块矩形的画板,长为x,宽为y,两个玩家在这 ...

  3. java画圈_java动态画圈圈。运用多线程,绘图

    总结:只是意外的收获吧.之前一篇是老师教的,一个点,从底层开始升起,到鼠标按下的地方开始画圈圈, 现在改变了一下,因为点上升的一个循环和画圈的循环是分开的 现在让点点自己跑,并且边跑边画圈.而且在fo ...

  4. dll domodal运行时异常_解决装备疑难,计算机丢失***.dll文件方法「设计画圈」

    各位小伙伴们大家好 欢迎大家来到[设计画圈] 本次给大家分享关于[计算机丢失***.dll文件解决方法] 如这些熟悉的弹窗 等等...还有很多系统错误 解决方法? 答:修复这些文件 用什么修复? 答: ...

  5. 怎样在百度地图上画圈_知识地图分享:你不是记忆差,你只是没找对方法

    生活的朋友都想拥有过目不忘的超能力,渴望挥手告别疯狂重复却很难记住的困境.超强的记忆力在上学与工作中都发挥着重要的作用. 多年前有一部港剧<读心神探>,里面的男主角姚学琛年少时学习差劲,被 ...

  6. 百度地图完全模仿链家找房,三级下钻联动聚合,画圈找房!

    废话不多说,说一下功能点,具体有需要请下载源码直接运行观看! 主要功能点 1.以北京为基础,区->街道->小区,三级下钻联动. 2.根据地图视野动态加载相应点位,以此来提高性能. 3.画圈 ...

  7. matlab中在图像上划线 画圈的方法

    其实用plot都可以搞定. plot(imp(:,1),imp(:,2),'ro'); %最后的'ro',r是代表红色,o是代表画圈.画圈的话可以提供多个点的坐标,我这里用的就是向量的形式. plot ...

  8. cv2画圈写字保存图像

    画圈 Syntax: cv2.circle(image, center_coordinates, radius, color, thickness) Parameters: image: It is ...

  9. 图片画圈画箭头用什么软件_怎么在excel图片上画箭头 | 在excel里面怎样画圆圈里面有叉...

    如何在excel表格数据上画圈 插入--特殊符号--数字序号--自己找 圆圈不是画的 可能有其它方法,等高人 用excel如何在阿拉伯数字数字上画圈 试用一下区位码.Windows 自带区位码输入法, ...

  10. RCircos包绘制染色体模式图_2020-04-01

    ## 1.设置当前工作目录 setwd("./RCircos") ## 2.安装和导入R包:RCircos # install.packages("RCircos&quo ...

最新文章

  1. Eclipse如何更改包名后,批量修改文件的包名
  2. 企业桌面安全管理解决方案
  3. matlab fix函数_Matlab课后答案第四章
  4. tomcat启动时提示Failed to initialize end point associated with ProtocolHandler [http-apr-8080]
  5. 正则式简介及常用正则式
  6. Spring-注入方式(基于xml方式)
  7. vue路由跳转 返回上一级 this.$router.go(-1) 和返回到指定页面this.$router.push('/home')...
  8. C和C++编程中static关键字的含义-修饰函数和变量
  9. linux sysfs link(sysfs_create_link)
  10. Python标准库中的io
  11. Sberbank Russian Housing Market比赛总结
  12. arXiv上引用文章在bibtex下的引用格式
  13. MSDN 2015本地帮助文档安装教程(简单明了版)
  14. OpenSSL密码库算法笔记——第 3.2.2章 利用Barrett约化实现
  15. 模块化认知:演化如何自下而上涌现出智能?
  16. Java 桌球小游戏
  17. Kafka集群的搭建与批量启停
  18. 串口调试软件,功能强大,侦测,拦截,逆向分析串口通汛协议
  19. 不可思议但又无处不在的漏洞,WEB安全基础入门—业务逻辑漏洞
  20. Openid Connect(OIDC)

热门文章

  1. 如何创建sis文件——PKG文件格式
  2. 华夏出入口车牌识别摄像机
  3. 解决ImportError: cannot import name ‘bbox_overlaps_cython‘
  4. 1.《天空之城》- 尤克里里指弹入门版
  5. Peta数据集识别性别
  6. 大学英语精读第三版(第五册)复习笔记——文章内容摘要
  7. 光环五正在连接服务器,五亿美元打水漂了?追了这么久的光环系列,玩家根本没法看...
  8. 数据库系统SQL编程-02
  9. 蓝叠模拟器的通讯录位置
  10. Boundary loss for highly unbalanced segmentation