# (转帖）-circos-circlize-2

Circos可以用来画基因组数据的环状图，也可以用来绘制其它数据的相关环状图，功能甚是强大，各种环状的叠加，很是美观下面我们学习一下：

•circos.genomicTrackPlotRegion:  创建轨道，添加图形

•circos.genomicPoints:低水平函数，添加点

•circos.genomicLines: 低水平函数，添加线

•circos.genomicRect:  低水平函数，添加矩形

•circos.genomicText: 低水平函数，添加文本

1、数据

library(circlize)

set.seed(1)

#随机产生一个数据

bed<-generateRandomBed(nr = 10,nc = 1)

bed

2、初始化布局

par(mar = c(1, 1, 1, 1))

circos.initializeWithIdeogram()

circos.initializeWithIdeogram(species = "hg18")

circos.initializeWithIdeogram(species = "mm10")

circos.initializeWithIdeogram(species = 'hg19',chromosome.index = paste('chr',1:5,sep=""))

par(mar = c(1, 1, 1, 1))

par(mfrow=c(2,1))

#打乱顺序

circos.initializeWithIdeogram(species = 'hg18',sort.chr = F)

circos.initializeWithIdeogram(species = 'hg18',chromosome.index = c('chr1','chr2','chr3','chr4'))

#plotType函数：可以设定仅绘制轴和标签

circos.initializeWithIdeogram(plotType = c("axis", "labels"))

#仅仅初始化布局（什么也看不到）

circos.initializeWithIdeogram(plotType = NULL)

circos.initializeWithIdeogram(chromosome.index = c('chr1','chr2','chr3','chr4'))我们也是可以自己定制化轨道：

#设定随机数种子

set.seed(2)

#圆形布局

par(mar=c(1,1,1,1))

#初始化

circos.initializeWithIdeogram(species = 'hg18',plotType = NULL)

#绘制轨道

circos.trackPlotRegion(ylim=c(0,1),track.height = 0.2,panel.fun = function(x,y){

#获取信息（x、y范围，分类变量），这一步是必须的！

chr=get.cell.meta.data('sector.index')

xlim=get.cell.meta.data('xlim')

ylim=get.cell.meta.data('ylim')

#在轨道上绘制矩形

circos.rect(xleft = xlim[1],ybottom = ylim[1],xright = xlim[2],ytop = ylim[2]-0.5,col=rand_color(1))

#添加文本信息

circos.text(x=mean(xlim),y =ylim[2]-0.3,labels = chr,font=1,facing =

'bending.outside', niceFacing = T,cex=0.6)},bg.border = NA)

#重置命令

circos.clear()

df = data.frame(

name = c("TP53", "TP63", "TP73"),

start = c(7565097, 189349205, 3569084),

end = c(7590856, 189615068, 3652765))

#下面三条命令绘制结果一样

circos.genomicInitialize(df)

circos.genomicInitialize(df, sector.names = c("tp53", "tp63", "tp73"))

circos.genomicInitialize(df, plotType=c('axis','labels'))

#载入数据

load(paste0(system.file(package = "circlize"), "/extdata/tp_family.RData"))

names(tp_family)

#外显子名字

names(tp_family[["TP53"]])

#位置信息

#构造数据框

df<-data.frame(

gene=names(tp_family),

start=sapply(tp_family,function(x)min(unlist(x))),

end=sapply(tp_family,function(x)max(unlist(x))))

#初始化

circos.genomicInitialize(df)

#绘制轨道

circos.genomicTrackPlotRegion(ylim = c(0, 1),

bg.col = c("blue", "green", "grey"),

bg.border = NA, track.height = 0.05)

#初始化

circos.genomicInitialize(df)

#绘制轨道

circos.genomicTrackPlotRegion(ylim = c(0, 1), bg.col = c("blue", "green", "grey"),

bg.border=NA,track.height = 0.05)

n = max(sapply(tp_family, length))

#创建新的轨道

circos.genomicTrackPlotRegion(ylim = c(0.5, n + 0.5),

panel.fun = function(region, value, ...) {

#类别变量信息（有三个：TP53,TP63,TP73）

gn = get.cell.meta.data("sector.index")

#从列表中获取每个类别变量的信息

tr = tp_family[[gn]]

#循环绘制线、矩形

for(i in seq_along(tr)) {

current_tr_start = min(tr[[i]]\$start)

current_tr_end = max(tr[[i]]\$end)

circos.lines(c(current_tr_start, current_tr_end),c(n - i, n - i), col = "#CCCCCC")

circos.genomicRect(tr[[i]], ytop = n - i + 0.4,  ybottom = n - i - 0.4, col = "orange", border = NA)  }

}, bg.border = NA, track.height = 0.3)

circos.clear()

3、构建作图区域（添加点、线、矩形等）

#单个变量

circos.genomicTrackPlotRegion(data,ylim=c(0,1),

panel.fun=function(region,value,...) {

circos.genomicPoints(region, value, ...)

})

#多个变量

circos.genomicTrackPlotRegion(data, numeric.column,

panel.fun=function(region,value,...) {

circos.genomicPoints(region, value, ...)

})

circos.genomicPoints(region, value,numeric.column=c(1,2))

circos.genomicPoints(region, value, cex, pch)

circos.genomicPoints(region, value, sector.index, track.index)这里numeric.column也可以用列的名字代替

circos.genomicPoints=function(region,value,numeric.column=1,...) {

x=(region[[2]]+region[[1]])/2

y=value[[numeric.column]]

circos.points(x, y, ...)

}这里circos.points也可以表示出circos.genomicPoints。

circos.genomicLines(region, value,numeric.column=c(1,2))

circos.genomicLines(region, value, lwd,lty="segment")

circos.genomicLines(region, value, area, baseline, border)

circos.genomicLines(region, value, sector.index, track.index)

Text：文本circos.genomicText(region, value, ...)

circos.genomicText(region, value, y, labels)

circos.genomicText(region, value, numeric.column, labels.column)

circos.genomicText(region, value, facing, niceFacing, adj)

circos.genomicText(region, value, sector.index, track.index)

Rectangle：矩形circos.genomicRect(region, value,ytop=1,ybottom=0)

circos.genomicRect(region, value,ytop.column=2,ybottom=0)

circos.genomicRect(region, value, col, border)

colorRamp2(breaks=c(-1,0,1),colors=c("green","black","red"))分割断点-1，0，1分别对应颜色green、black、red；此外-1到0对应green到black的渐变色，0到1对应black到red的渐变色。

### 推荐阅读更多精彩内容

• 最近又看了一部与西游题材有关的电影《功夫瑜伽》。不过与《西游伏妖篇》和《大闹天竺》比起来，也是毫不逊色。电影的制作...
鹿鹿无畏阅读 575评论 2 51
• 鲁迅先生说：悲剧就是将人生有价值的东西毁灭给人看。在爱情戏剧里，求不得、恨别离似乎总是比金玉缘、喜结姻更具有情感渲...
叶薄荷阅读 2,767评论 13 14
• 春天来了，花红柳绿、惠风和畅，正是出游踏青的好时候！俗话说的好，大好春光，岂可辜负？于是，只要有空闲，我们...
七七爱天空阅读 58评论 0 0
• 嘀嗒嘀嗒嘀嗒嘀嗒，时针它不停在转动，嘀嗒嘀嗒嘀嗒嘀嗒，伤心的泪儿谁来擦，嘀嗒嘀嗒嘀嗒嘀嗒，是不是还会牵挂他…… 窗...
半浅阅读 632评论 8 2
• 第一个 从很小的时候开始，我的屁股后面就长了条尾巴。 它很可爱，毛茸茸的，但搭配上我光滑无毛的臀部就不再可爱而是可...
名贵的考拉熊阅读 9,229评论 95 239