(转帖)-circos-circlize-2

原文地址:https://mp.weixin.qq.com/s/wiTOWfrscK_dfDxk2vEFig

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

基本参数:

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

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

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

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

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

•circos.genomicLink:添加连线

1、数据

数据格式:数据框

数据框必须包含三列信息:第一列是因子变量(基因类别、染色体等),第二列和第三列是数值变量,表示第一列因子的起始和终止位置。

library(circlize)

set.seed(1)

#随机产生一个数据

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

bed

当然,你还可以增加很多变量(上述数据只有一个变量value1),需要设定nc=”变量数目“

2、初始化布局

默认:我们借用人类基因组信息进行布局:

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

circos.initializeWithIdeogram()

当然了,circos.initializeWithIdeogram有很多参数可以选择,你可以绘制其它物种的信息(species可以选择物种)。

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'))

注意:如果你不设定chromosome.index, 染色体顺序是可以打乱顺序的,也就是说可以人为排序。当你设定后chromosome.index,sort.chr是不起作用的,染色体位置信息取决于你的因子水平。

当然了,很重要的一点就是,轨道上的信息,我们可以通过参数plotType调整。

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

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

#仅仅初始化布局(什么也看不到)

circos.initializeWithIdeogram(plotType = NULL)

上一节我们也谈到图形绘制起始角度,扇形之间的距离,轨道高度等参数,在这里我们演示一下。

circos.par("start.degree" = 90,gap.degree=c(rep(2,3),10),cell.padding=c(0,0,0,0))

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"]])

#位置信息

head(tp_family[['TP53']])[[1]]

#构造数据框

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.genomicPointscircos.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 circos.genomicLines(region, value, ...)

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

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的渐变色。

注意:这篇文章整个放不下了,请到附文查看……

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,105评论 0 10
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,517评论 0 38
  • 最近又看了一部与西游题材有关的电影《功夫瑜伽》。不过与《西游伏妖篇》和《大闹天竺》比起来,也是毫不逊色。电影的制作...
    鹿鹿无畏阅读 892评论 2 51
  • 鲁迅先生说:悲剧就是将人生有价值的东西毁灭给人看。在爱情戏剧里,求不得、恨别离似乎总是比金玉缘、喜结姻更具有情感渲...
    叶薄荷阅读 3,972评论 13 14
  • 春天来了,花红柳绿、惠风和畅,正是出游踏青的好时候!俗话说的好,大好春光,岂可辜负?于是,只要有空闲,我们...
    七七爱天空阅读 108评论 0 0