R语言绘制Circos图

2019-07-31 09:52:45 浏览数 (1)

Circos图加拿大的生物信息科学家 Martin Krzywinski 开发的,最初主要用于基因组序列相关数据的可视化。现在越来越多的领域把Circos图引入其中。今天我们介绍在R语言中如何绘制Circos图。

首先我们看下Circos的官网(http://circos.ca/),其实他们提供了自己的绘制工具包,为了更加方便绘制Circos。我们利用了R语言中的circlizeR包进行Circos的绘制。

1. Install.packages(“circlize”)#安装R包。

2. R包的载入之后的状态

3. 我们看下R包中可以实现的功能函数列表。

名称

简介

circos.initialize

创建Circos图布对象

circos.track

创建track

circos.update

单独需要编辑的cell

circos.par

设计Circos的布局,Crcos起始位置设定

circos.info

Circos构成信息,CELL_META获取对应的Circos值

circos.clear

重置图形参数

circos.points

添加点

circos.lines

添加由点组成的线

circos.rect

绘制矩形,cell也是矩形

circos.polygon

绘制多边形,或者说是阴影区域

circos.segments

绘制两点之间直线

circos.axis,circos.xaxis,circos.yaxis

为每个cell添加坐标轴值

circos.link

绘制cell之间的连线

circos.trackPoints

为同一个track中所有的cell中添加点

circos.trackLines

为同一个track中所有的cell中添加线

circos.trackText

为同一个track中所有的cell中添加标签

circos.initializeWithIdeogram

基因染色体分布图形绘制带条图

circos.genomicInitialize

基因染色体分布图形绘制不带条图

circos.genomicHeatmap

绘制热图

circos.genomicDensity

基因密度图绘制

circos.genomicLabels

标注特殊的基因区域

chordDiagram

体现两者之间关联程度的大小

4. 样例程序的运行。我们首先了解Circos中索引sector.index =n(n=a,b,c…),track.index =m(m=1,2,3…)。

首先绘制第一个track,并使用circos.points为其中一个cell添加其他颜色点

circos.initialize(letters[1:8], xlim = c(0,1))

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

circos.points(runif(10), runif(10))

})

circos.points(runif(10), runif(10),sector.index = "c", pch = 16, col = "red")

只要不运行circos.clear函数,通过以下函数可以增加相应的track。

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

circos.points(runif(10), runif(10))

})

我们可以再添加一层绘制曲线以及带阴影区域track。

circos.trackPlotRegion(ylim = c(-3, 3),track.height = 0.4, panel.fun = function(x, y) {

x1 = runif(20)

y1 = x1 rnorm(20)

or = order(x1)

x1 = x1[or]

y1 = y1[or]

loess.fit = loess(y1 ~ x1)

loess.predict = predict(loess.fit, x1, se = TRUE)

d1 = c(x1, rev(x1))

d2 = c(loess.predict$fit loess.predict$se.fit,

rev(loess.predict$fit - loess.predict$se.fit))

circos.polygon(d1, d2, col = "#CCCCCC", border = NA)

circos.points(x1, y1, cex = 0.5)

circos.lines(x1, loess.predict$fit)

})

最后我们运行circos.clear()清空我们图形缓存。

以上就是Circos的绘图原理,当然如果想更加漂亮的绘制Circos还需要颜色的搭配。如果想把多个Circos进行整合可以直接使用函数layout(),结果如下图:

0 人点赞