作者:李誉辉 四川大学在读研究生
往期精彩:
[参考来源](https://jokergoo.github.io/circlize_book/book/the-chorddiagram-function.html)
par参数:
lty: line type. 可以是数字或者字符,
(0 = “blank”, 1 = “solid” (default), 2 = “dashed”, 3 = “dotted”, 4 = “dotdash”, 5 = “longdash”, 6 = “twodash”)lwd: line width. 默认是 1, 设置线宽的放大倍数.
cex: 设置文字和符号相对于默认值的大小, 为一个比例数值. 当使用 mfrow 或 mfcol 也会改变该值.
mai: 以 inch 为单位的图像边距, c(bottom, left, top, right).
mar: 以行数来表示图像边距, c(bottom, left, top, right), 默认是 c(5, 4, 4, 2) + 0.1.
mfcol, mfrow: 调整图形输出设备中子图排列的向量, c(nrow, ncol),
mfcol 让子图按照列优先排列, 相应的, mfrow 让子图按照行优先排列.当设置 mfcol mfrow 后, cex 和 mex 的基本单位都相应减小.
和弦图
和弦图简介
和弦图长什么样子:
和弦图在线
(http://circos.ca/intro/tabular_visualization/)
和弦图即可以反映2类变量之间的相互作用关系,也可以反映相互作用强度,这是其它图比不了的
和弦图的弦link的宽度代表所连接的两个对象的相互作用强弱,link越宽,则相互作用越强
和弦图常用于绘制国家之间的贸易往来量,城市之间的航班往来量,还有细胞和基因数据可视化(这个领域不了解)
邻接表(和弦图数据源)
邻接表强调2类对象之间的相互作用强弱,分为邻接矩阵(adjacency matrix)和邻接列表(adjacency list)
邻接矩阵为表示矩阵格式,邻接矩阵的元素映射到弦link的宽度,表示所在行名称和列名称的相互作用强弱
邻接列表通常前2列分别为2类对象,第3列映射到弦link的宽度,表示前2列对应行的元素相互作用强弱
circlize内置的和弦图绘制函数chordDiagram()
对这2种邻接表都支持,但对于后续参数修改,使用邻接列表更方便
邻接表:
library(circlize)
# 编一个邻接矩阵
mat <- matrix(1:9, 3) # 第1列不是id列,通过行命名替代
rownames(mat) <- letters[1:3]
colnames(mat) <- LETTERS[1:3]
mat
# 编一个邻接列表
df <- data.frame(from = letters[1:3], to = LETTERS[1:3], value = 1:3)
df
可以使用内置函数generateRandomBed()
产生随机基因类数据:
语法:generateRandomBed(nr = 10000, nc = 1, fun = function(k) rnorm(k, 0, 0.5), species = NULL)
参数解释:
nr 表示指定产生数据行数
nc 表示指定产生数据列数, 数据值的列
fun 表示指定参数随机数的方法
species 表示种类,传递给
read.cytoband
library(circlize)
set.seed(999)
bed = generateRandomBed() # 默认参数
head(bed)
bed = generateRandomBed(nr = 200, nc = 4)
nrow(bed)
bed = generateRandomBed(nc = 2, fun = function(k) sample(letters, k, replace = TRUE)) # 默认产生1000行数据
head(bed)
初步绘图
输入邻接表数据,默认参数,自动绘图,
构造数据
library(circlize)
# 构造一个邻接矩阵
set.seed(999)
mat <- matrix(sample(18, 18), 3, 6) # 3行6列的矩阵
rownames(mat) <- paste0("S", 1:3) # 生成行名
colnames(mat) <- paste0("E", 1:6) # 生成列名
# 构造一个邻接列表
df <- data.frame(from = rep(rownames(mat), times = ncol(mat)), # 第1列对象
to = rep(colnames(mat), each = nrow(mat)), # 第2列对象
value = as.vector(mat), # 第3列前2列对象相互作用强度
stringsAsFactors = FALSE)
df