其他
circlize 之 Introduction
circlize 之 Introduction
背景
Circos 是用 perl 语言编写的软件,可以来绘制复杂的环形图,但是需要在 linux 环境运行,此外需要很多配置文件。为了方便数据的分析和可视化,顾祖光(作者)基于 R 编程环境开发了 circlize 的 R 包,使用起来更方便简单。
作者顾祖光
南京大学博士毕业,现在在德国癌症研究中心工作,是一名生信研究员,研究领域有基因组学、表观组学、开发软件、可视化等等。其中 ComlexHeatmap、EnrichedHeatmap、simplifyEnrichment 等强大的 R 包都是他开发的,大佬!
circlize 可以使用简单的图形一层层叠加,构成更加复杂的图形出来,展示更多更复杂的信息。
circlize 入门
A、基本函数
1、基本图形
circos.points(): 在单元格添加点. circos.lines(): 在单元格添加线. circos.segments(): 在单元格添加片段. circos.rect(): 在单元格添加矩形. circos.polygon(): 在单元格添加多边形. circos.text(): 在单元格添加文字. circos.axis() 在单元格添加坐标.
2、添加两个位置的连线
circos.link()
3、添加高级图形
circos.barplot(): 绘制条形图. circos.boxplot(): 绘制箱型图. circos.violin(): 绘制小提琴图. circos.heatmap(): 绘制环形热图. circos.raster(): 绘制光栅图. circos.arrow(): 绘制环形箭头.
4、环形布局排列
circos.initialize(): 分配扇区. circos.track(): 单个轨道上创建单元格. circos.update(): 更新单元格. circos.par(): 图形参数设置. circos.info(): 打印绘图参数. circos.clear(): 重置.
B、示例图形
C、快速预览
创建随机数据:
set.seed(999)
n = 1000
df = data.frame(sectors = sample(letters[1:8], n, replace = TRUE),
x = rnorm(n), y = runif(n))
head(df,3)
sectors x y
1 c -0.3383765 0.2277292
2 d 0.2012877 0.8345422
3 e 0.6027117 0.6507941
初始化:
library(circlize)
circos.par("track.height" = 0.1) # 设置轨道高度,相当于圆半径10%
circos.initialize(df$sectors, x = df$x) # 初始化
添加轨道:
circos.track(df$sectors, y = df$y,
panel.fun = function(x, y) {
# 添加扇区的标签
circos.text(CELL_META$xcenter,
CELL_META$cell.ylim[2] +
mm_y(5), # 偏移5mm
CELL_META$sector.index)
# 添加扇区刻度
circos.axis(labels.cex = 1)
})
添加点和文字:
col = rep(c("#FF0000", "#00FF00"), 4)
circos.trackPoints(df$sectors, df$x, df$y, col = col, pch = 16, cex = 0.5) # 添加点
circos.text(-1, 0.5, "text", sector.index = "a", track.index = 1) # 给a添加text文字
添加柱形图:
bgcol = rep(c("#EFEFEF", "#CCCCCC"), 4)
circos.trackHist(df$sectors, df$x, bin.size = 0.2, bg.col = bgcol, col = NA)
添加线图:
circos.track(df$sectors, x = df$x, y = df$y,
panel.fun = function(x, y) {
ind = sample(length(x), 10)
x2 = x[ind]
y2 = y[ind]
od = order(x2)
circos.lines(x2[od], y2[od])
})
更新指定轨道的单元格并添加点和文字:
circos.update(sector.index = "d", track.index = 2,
bg.col = "#FF8080", bg.border = "black")
circos.points(x = -2:2, y = rep(0.5, 5), col = "white")
circos.text(CELL_META$xcenter, # 文字位置
CELL_META$ycenter, # 文字位置
"updated", col = "white")
添加热图:
circos.track(ylim = c(0, 1), panel.fun = function(x, y) {
xlim = CELL_META$xlim
ylim = CELL_META$ylim
breaks = seq(xlim[1], xlim[2], by = 0.1)
n_breaks = length(breaks)
circos.rect(breaks[-n_breaks], rep(ylim[1], n_breaks - 1),
breaks[-1], rep(ylim[2], n_breaks - 1),
col = rand_color(n_breaks), border = NA)
})
添加连接线:
circos.link("a", 0, "b", 0, h = 0.4)
circos.link("c", c(-0.5, 0.5), "d", c(-0.5,0.5),
col = "red", # 连接线的填充颜色
border = "blue", # 连接线颜色
h = 0.2 ) # 连接线高度
circos.link("e", 0, "g", c(-1,1),
col = "green",
border = "black",
lwd = 2, # 连接线粗细
lty = 2) # 连接线形状
清空画布:
circos.clear()
欢迎小伙伴留言评论!
今天的分享就到这里了,敬请期待下一篇!
最后欢迎大家分享转发,您的点赞是对我的鼓励和肯定!
如果觉得对您帮助很大,打赏一下吧!