作者:李誉辉四川大学在读研究生
R_插值_拟合_回归_样条
[参考来源](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种邻接表都支持,但对于后续参数修改,使用邻接列表更方便 邻接表:
可以使用内置函数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) 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
绘图
library(circlize) # 使用邻接矩阵 chordDiagram(mat) circos.clear() # 结束绘图,否则会继续叠加图层 # 使用邻接列表 chordDiagram(df) circos.clear()
参数调整
调整了参数,绘图结束后,使用circos.clear()重置参数,使返回到默认状态
参数分为2大类:
- 第1类为circos.par()内置参数
- 第2类为chordDiagram()内置参数
分类 | 参数 | 描述 |
---|---|---|
sectors间隙 | gap.after | 调整外围sectors之间的间隙,用数字向量进行指定 |
sectors旋转方向 | clock.wise | 为逻辑值,设置外围sectors的旋转方向 |
sectors起点位置 | start.degree | 为-360到360的数字,调整第一个sector的位置,与旋转方向有关 |
sectors之间的间隙可以用gap.after =调整
指定间隙的数字向量长度应该与sectors数量一致
library(circlize) # 使用邻接矩阵时 circos.par(gap.after = c(rep(5, nrow(mat)-1), # 2个5,表示3个行名之间的间隙分别为5个单位 15, # 表示行名与列名之间的间隙,为15个单位 rep(5, ncol(mat)-1), # 5个5,表示6个列名之间的间隙分别为5个单位 15)) # 表示列名与行名之间的间隙,为15个单位 chordDiagram(mat) circos.clear() # 返回默认设置 # 使用邻接列表时 circos.par(gap.after = c(rep(5, length(unique(df[[1]]))-1), # 表示第1列元素之间的间隙为5个单位 15, # 表示第1列与第2列之间的间隙为15个单位 rep(5, length(unique(df[[2]]))-1), # 表示第2列元素之间的间隙为5个单位 15)) # 表示第2列与第1列之间的间隙为15个单位 chordDiagram(df) circos.clear()
sector起点位置及旋转方向调整
sector默认为3点钟顺时针方向,
- circos.par(start.degree = )可以调整起点位置,起点位置还与旋转方向有关
- circos.par(clock.wise = FALSE/TRUE) 可以调整旋转方向
chordDiagram内置参数
chordDiagram()内置参数很多,分类及作用如下:
分类 | 参数 | 描述 |
---|---|---|
sectors顺序 | order | 调整外围sectors排列顺序,用字符串向量指定,其长度与sectors数量一致 |
sectors颜色 | grid.col | 调整外围sectors颜色,颜色向量指定,通常使用名称属性进行匹配,默认顺序匹配 |
link颜色 | col | 用颜色矩阵或颜色向量指定,对于邻接矩阵和邻接列表不一样 |
link透明度 | transparency | 用0(不透明)到1(透明)的数字指定,如果要设置不同的透明度,则用法与颜色指定类似 |
link边线宽 | link.lwd | 用数字指定link弦边缘线宽度 |
link边线型 | link.lty | 用数字指定link弦边缘线的线型,与par参数一致 |
link边线颜色 | link.border | 指定link弦边缘线的颜色 |
link弦可见 | link.visible | 指定要显示的弦,用逻辑向量或矩阵指定,只显示逻辑值为正的弦 |
sectors内的顺序 | link.decreasing | 为逻辑值,表示指定link在sector内的顺序,需要先指定link.sort = TRUE |
sectors外顺序 | link.rank | 指定link在各个sector之间的顺序,用数字向量或矩阵指定,值大的后添加在表层 |
自我连接 | self.link | 指定自我连接的类型,=1 或 =2 |
对称矩阵 | symmetric | 为逻辑值,symmetric = TRUE表示只画邻接矩阵下三角部分,不包括对角线 |
link方向 | directional | =1或 =-1,设置方向后,link终点高度将缩短,可以调节缩短量 |
link箭头 | direction.type | 指定方向类型: "arrows",c("arrows", "diffHeight"),"big.arrow"大箭头 |
link高度 | diffHeight | 指定link终点缩短量,可以为负数,必须先在direction.type中设定diffHeight |
窄弦丢弃 | reduce | 从0到1的数字,表示link宽度小于弦总宽度百分比的link将不予显示,circos.info()可查看 |
轨道显示 | annotationTrack | 表示指定要显示的轨道,NULL隐藏,c("name", "grid", "axis")标签,网格和刻度 |
- 对于邻接矩阵,外围sector的顺序与union(rownames(mat), colnames(mat))一致,默认从3点钟方向顺时针旋转
- 对于邻接列表,外围sector的顺序与union(df[[1]], df[[2]])一致
- order参数调整外围sector的顺序,当然指定字符串向量的长度应与sectors的数量一致 如图所示:
- library(circlize) chordDiagram(mat, order = c("S1", "E1", "E2", "S2", "E3", "E4", "S3", "E5", "E6")) # 使用order参数调整顺序,默认3点钟顺时针方向 circos.clear()
颜色调整
通常外围sector分为2类,第1类代表邻接矩阵的行名或邻接列表的第一列,第2类代表邻接矩阵的列名和邻接列表的第2列,
连接弦link就是将2类sectors连接起来, 默认连接弦link的颜色与第1类对象的颜色一致,
改变外围sector中第1类对象的颜色,连接弦的颜色也会随之改变
- 外围sector的颜色可以用chordDiagram(grid.col= )参数调整, 指定的颜色向量最好有一个名称属性,该名称属性与secters名称一样,这样才能一一匹配,否则没有名称属性则按顺序匹配
- 连接弦link的透明度可以用transparency参数调整,从0(完全不透明)到1(完全透明),默认透明度为0.5
- 连接弦link的参数可以用col参数调整,需要指定颜色矩阵(数据为邻接矩阵) 或颜色向量(数据为邻接列表) 可以用函数rand_color()产生随机颜色矩阵,可以在里面设置透明度参数,再指定透明度会被忽略 当相互作用relation为连续变量时,可以通过colorRamp2()产生连续的颜色向量,col参数也支持
- 当数据是连接矩阵时,可以不提供颜色矩阵,link颜色指定还可以用颜色向量指定,使用参数row.col或column.col指定 仅仅提供与行名或列名长度相同的颜色向量,颜色向量可以用颜色名称,hex色值,甚至数字表示 调整sectors颜色和link透明度
调整link颜色及透明度
colorRamp2(breaks, colors, transparency = 0, space = "LAB")离散色板连续化,space表示色彩空间
library(circlize) # 数据是邻接矩阵 col_mat <- rand_color(length(mat), transparency = 0.7) # 产生随机颜色矩阵,并指定透明度 dim(col_mat) <- dim(mat) # 以确保col_mat是一个矩阵 chordDiagram(mat, grid.col = grid_col, col = col_mat) # 设置link颜色, circos.clear() # 数据是邻接列表 cols <- rand_color(nrow(df), transparency = 0.7) chordDiagram(df, grid.col = grid_col, col = cols) circos.clear() # link为连续变量 col_fun <- colorRamp2(range(mat), c("#FFEEEE", "#FF0000"), transparency = 0.5) # 产生连续色块并指定透明度 chordDiagram(mat, grid.col = grid_col, col = col_fun) circos.clear() # 用数字指定link颜色 chordDiagram(mat, grid.col = grid_col, row.col = 1:3, transparency = 0.7) # 用数字向量指定颜色,向量长度与连接矩阵的行数相同 chordDiagram(mat, grid.col = grid_col, column.col = 1:6, transparency = 0.7) # 用数字向量指定颜色,向量长度与连接矩阵的列数相同 circos.clear()
link边线宽,边线型,边线颜色
- link,lwd 参数调整link边缘线宽度
- link.lty 参数调整link边缘线线型
- link.border 参数调整link边缘线的颜色
- 当数据是邻接矩阵时,这3个参数均可以用长度为1的向量指定,或矩阵
- 本文固定链接: https://maimengkong.com/image/1088.html
- 转载请注明: : 萌小白 2022年6月30日 于 卖萌控的博客 发表
- 百度已收录