R语言acres92 region_[R语言 学习笔记] circlize绘制基因组圈图的原理与使用(一)...

本文介绍了R语言circlize包用于绘制基因组圈图的基本原理和使用方法,包括如何利用低级绘图函数创建复杂图形、设置面板函数`panel.fun`以及绘制和弦图的示例代码。通过将坐标系统转换为极坐标,circlize能够方便地在圆形区域内绘制图形。

由于图形大多由点、线、多边形等简单图形组成,circlize实现了在圆形作图区域添加图形的低级绘图函数,通过低级绘图函数的不同组合,可以轻松生成更复杂的图形。这一原则确保了各种类型的高级图形不会受软件包本身的通用性限制,并且可以在此基础上构建针对特定兴趣的高级包。

欢迎大家批评指正

转载请标明出处:https://www.ivistang.com/articles/296

circlize的原理

circlize会把一块画布上的常见坐标系统转化成极坐标系统,并将其标注成普通的二维坐标系。这一块区域就被称为track,不同track组成了一个形如圈的sector。

panel.fun参数

panel.fun通常会在当前track区域进行绘制,为了能够批量在当前sector绘制图形,可以设置sector.index=get.cell.meta.data("sector.index")以及track.index=get.cell.meta.data("track.index"),通过trackPlotRegion来绘制新的sector。panel.fun的通常设置形式是panel.fun=function(region,value,...){...}。circos.genomicTrackPlotRegion接受的输入形式为数据框,这可以类比为一个bed文件。一个通常的bed文件应该至少有四行,region就是前三列,表示了染色体、起始位点、终止位点。value则对应了其他数据列。

和弦图示例

代码如下:

library(circlize)

genome=read.cytoband(species = "hg19") ###circlize包预制的hg19基因组

chr=data.frame(chr=names(genome$chr.len),start=1,end=genome$chr.len)

set.seed(12345)

bed=generateRandomBed(nr = 50,species = "hg19") ###生成随机bed注释

bed$color=sample(rainbow(7),size = 55,replace = TRUE)

link1=generateRandomBed(nr=100)

link1$color="skyblue"

link2=generateRandomBed(nr=100)

link2=link2[sample(1:nrow(link2), nrow(link2)),]

####设置输出文件####

#pdf("random_circle1.pdf")

circos.clear()

####和弦图初始化####

circos.initialize(factors = as.factor(a$chromosome),xlim = chr[,2:3])

####添加坐标轴####

circos.genomicTrackPlotRegion(chr, ylim = c(0, 1), bg.border = NA, track.height=0.05,panel.fun = function(region,value,...){

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

track.index = get.cell.meta.data("track.index")

xlim = get.cell.meta.data("xlim", sector.index = sector.index, track.index = track.index)

major.by = 40000000

major.at = seq(floor(xlim[1]/major.by) * major.by, xlim[2], by = major.by)

major.at = c(major.at, major.at[length(major.at)] + major.by)

major.tick.labels=major.at/1000000

circos.axis(h = 1,labels.cex = 0.8, major.at = major.at, labels = major.tick.labels,labels.font=2,col="grey",minor.ticks = 0,

sector.index = sector.index,track.index = track.index,major.tick.length = convert_y(1.5,"mm",sector.index,track.index),lwd = 2)

circos.rect(xlim[1],0,xlim[2],1,col="grey",border=NA)

})

####添加基因块####

circos.genomicTrackPlotRegion(bed,ylim = c(0, 1), bg.border = NA, track.height=0.05,panel.fun = function(region,value,...){

sector.index = get.cell.meta.data("sector.index");print(sector.index)

track.index = get.cell.meta.data("track.index");print(track.index)

circos.rect(region$start,0,region$end,1,col=value$color,sector.index = sector.index,track.index = track.index,border=NA)

})

####添加link####

circos.genomicLink(link1, link2, col = link1$color, border = NA)

#dev.off()

结果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值