taoyan:伪码农,R语言爱好者,爱开源。
个人博客: https://ytlogos.github.io/
公众号:生信大讲堂
往期回顾
circlize包
circlize包在德国癌症中心的华人博士Zuguang Gu开发的,有兴趣的可以去看看他的Github主页(https://github.com/jokergoo)。这个包有两个文档,一个是介绍基本原理的绘制简单圈圈图的,也是本次要介绍的。另外一份文档专门介绍基因组数据绘制圈圈图Genomic Circos Plot,我自己还没看完,下次再介绍。
根据我的学习发现这个包与ggplot2很相似,也是先创建一个图层,然后不断的添加图形元素(point、line、bar等),这些简单的图形元素都有circos.这个前缀进行绘制,比如要绘制点,则用circos.points()。具体的下面一一介绍。
用circlize绘制圈圈图
照例,没有安装这个包的先安装:install.packages("circlize")或者devtools::install_github("jokergoo/circlize")。
绘图第一步是先初始化(circos.initialize),接下来绘制track,再添加基本元素。需要提一下的是,由于circlize绘制图是不断叠加的,因此如果我们一大段代码下来我们只能看到最终的图形,这里为了演示每端代码的结果,所以每次我都得初始化以及circlize.clear。
library(circlize)
# 简单创建一个数据集
set.seed(999)
n <- 1000
a <- data.frame(factors = sample(letters[1:8], n, replace = TRUE), x = rnorm(n), y = runif(n))
绘制第一个track
par(mar = c(1, 1, 1, 1), lwd = 0.1, cex = 0.6)
circos.par(track.height = 0.1)
circos.initialize(factors = a$factors, x = a$x)
#初始化,factors来控制track数目,初始化里只有x, 没有y。这一步相当于ggplot()
circos.trackPlotRegion(factors = a$factors, y = a$y,
panel.fun = function(x, y) {
circos.axis()})
col <- rep(c("#FF0000", "#00FF00"), 4) #自定义一下颜色
# 这里先解释一下,一个track有好几个cell,具体数目由factors决定的,向本数据集中factors有八个,因此绘制一个track,其包含八个cell。含有前缀circos.track的函数会在所有的cel里添加基本元素,而只有前缀circos.的函数可以在特定的track、cell里添加基本元素。具体看下演示。
circos.trackPoints(a$factors, a$x, a$y, col = col, pch = 16, cex = 0.5) #所有的cell里都绘制点图
circos.text(-1, 0.5, "left", sector.index = "a", track.index = 1) #在track 1中的标记为a的cell里添加
textcircos.text(1, 0.5, "right", sector.index = "a")
circos.clear()
接下来绘制第二个track
circos.trackHist添加柱状图,由于柱状图相对高级一点,因此circos.trackHist会自动创建一个track,无需我们circos.trackPlotRegion进行创建。
par(mar = c(1, 1, 1, 1), lwd = 0.1, cex = 0.6)
circos.par(track.height = 0.1)
circos.initialize(factors = a$factors, x = a$x)
circos.trackPlotRegion(factors = a$factors, y = a$y,
panel.fun = function(x, y) {
circos.axis()})
col <- rep(c("#FF0000", "#00FF00"), 4)
circos.trackPoints(a$factors, a$x, a$y, col = col, pch = 16, cex = 0.5)
circos.text(-1, 0.5, "left", sector.index = "a", track.index = 1)
circos.text(1, 0.5, "right", sector.index = "a")
bg.col <- rep(c("#EFEFEF", "#CCCCCC"), 4)
circos.trackHist(a$factors, a$x, bg.col = bg.col, col = NA)
circos.clear()
创建第三个track