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(),结果如下图: