作者:李誉辉 四川大学在读研究生

往期精彩:

R_插值_拟合_回归_样条

接上一篇:R_circlize包_和弦图(一)

link弦可见

在需要强调某些relation时,需要高亮对应的弦,一般有4种高亮方式:

  • 设置弦边缘颜色(前面已经介绍了),

  • 设置不同的透明度,

  • 或只显示某些弦,其它全是透明的灰色

  • 通过link.visible参数指定要显示的弦,其它都不显示,可以用逻辑矩阵(对于邻接矩阵)或逻辑向量(对于邻接列表)进行指定

library(circlize)# 通过指定不同的颜色进行高亮
chordDiagram(mat, grid.col = grid_col, row.col = c("#FF000080", "#00FF0010", "#0000FF10"))
circos.clear()# 通过指定透明色给某些在范围之外的relation
col_mat[mat < 12] <- "#00000000" # relation < 12则变为透明色
chordDiagram(mat, grid.col = grid_col, col = col_mat) #
circos.clear()# 通过函数同时指定透明色和高亮色,对邻接列表数据源也适用
col_fun <- function(x) {ifelse(x < 12, "#00000000", "#FF000080") }# relation小于12则为透明色,反之为#FF000080石榴红
chordDiagram(mat, grid.col = grid_col, col = col_fun, transparency = 0.7)
circos.clear()# 事实上,所有颜色矩阵或颜色生成函数中色彩都是绘制在图形中的,只是程序内部将其透明度设置为了1,
# 通过3列特殊数据框指定的颜色,其缺失的颜色的relation将不会画出
col_df <- data.frame(c("S1","S2", "S3"), c("E5", "E6", "E4"), c("#FF000080", "#00FF0080", "#0000FF80"))
chordDiagram(mat, grid.col = grid_col, col = col_df)
circos.clear()# 对于邻接列表数据源,高亮弦调整更简单,只需要设置要高亮的颜色,其它为透明色就行了
cols <- rand_color(nrow(df))
cols[df[[3]] < 10] <- "#00000000" # 将df中第3列,即relation列,列值小于10的都更新为透明色HEX色值
chordDiagram(df, grid.col = grid_col, col = cols)# 通过link.visible参数调整
cols <- rand_color(nrow(df))
chordDiagram(df, grid.col = grid_col, link.visible = df[[3]] >= 10) # 只显示df第3列大于10的弦
circos.clear()






弦在同一个sector上的顺序调整

有时候为了方便查询,需要将弦link按宽窄顺序排列,可以用参数link.sortlink.decreasing设定:

  • link.sort = TRUE 表示设置顺序,默认为了好看自动调整弦的顺序,指定该参数后,link.decreasing 参数才有效

  • link.decreasing = TRUE/FALSE 表示降序或升序,默认顺时针,降序表示宽度沿顺时针方向逐渐下降

library(circlize)chordDiagram(mat, grid.col = grid_col, link.sort = TRUE, link.decreasing = TRUE) #按弦宽度下降排列,则弦宽沿顺时针方向逐渐下降
title("link.sort = TRUE, link.decreasing = TRUE",cex = 0.8) # 添加标题
circos.clear()chordDiagram(mat, grid.col = grid_col, link.sort = TRUE, link.decreasing = FALSE) # 弦宽沿顺时针方向逐渐增大
title("link.sort = TRUE, link.decreasing = FALSE", cex = 0.8)
circos.clear()

弦在多个sectors上的顺序调整

添加弦link的顺序对于视觉效果影响很大,默认安装数据源的顺序进行添加,可以用参数link.rank参数调整弦的添加顺序

  • 通常给邻接列表增加一列,为relation的秩,然后用秩指定link.rank参数,则relation越小,秩越大,
    link.rank参数先添加最大秩对应的弦,即最小的relation,于是relation越大,越出现在表层

  • 反之,如果要将宽的relation调整到下面,则直接用relation列指定link.rank参数

library(circlize)# 邻接矩阵数据源,求矩阵的秩,然后指定给link.rank参数
chordDiagram(mat, grid.col = grid_col, transparency = 0, link.rank = )# 设置透明度为0,方便观察
chordDiagram(mat, grid.col = grid_col, transparency = 0, link.rank = rank(mat)) # 用mat中的秩进行排序,秩最大先添加
circos.clear()# 邻接列表数据源,对relation列求秩,然后指定给link.rank参数
chordDiagram(df, grid.col = grid_col, transparency = 0, link.rank = rank(df[[3]])) # 第3列为relation列,求秩
circos.clear()


自我连接

当信息需要复制的时候,可以使用自我连接,使用参数self.link指定,用1或2指定,分别代表2种情形
这个用在基因或细胞复制的可视化中,其它用的比较少

library(circlize)df2 <- data.frame(start = c("a", "b", "c", "a"), end = c("a", "a", "b", "c"))
chordDiagram(df2, grid.col = 1:3, self.link = 1) #
chordDiagram(df2, grid.col = 1:3, self.link = 2)
circos.clear()


对称矩阵

当数据源是对称矩阵时,通过参数symmetric = TRUE,只有矩阵下三角部分relation会被可视化(不包括对角线)

library(circlize)mat3 <- matrix(rnorm(25), 5) # 生成25个均匀分布的随机数, 5行排列
colnames(mat3) <- letters[1:5]
cor_mat <- cor(mat3) # 求相关系数,则变为对称矩阵col_fun <- colorRamp2(c(-1, 0, 1), c("green", "white", "red"))
chordDiagram(cor_mat, grid.col = 1:5, symmetric = TRUE, col = col_fun)
title("symmetric = TRUE") # 增加标题
circos.clear()chordDiagram(cor_mat, grid.col = 1:5, col = col_fun)
title("symmetric = FALSE")
circos.clear()


弦link的方向

很多时候,数据源是有方向性的,如城市的航班来往,贸易来往,

  • 对于邻接矩阵,本身就可以是有方向性的,如以行名为方向的起点,或以列名为方向的起点

  • 对于邻接列表,通常用前2列的列的顺序表示方向,从第1列到第2列,或从第2列到1列
    directional指定弦的方向,directional = 1directional = -1

  • 对于邻接矩阵,1 表示从行名到列名,-1则反之

  • 对于邻接列表,1 表示从从第1列到第2列,-1则反之
    不设置方向属性时,弦的高度都相等,即与sectors之间的gap都相等,当设置方向后,则其中一端会缩短一些,如果短的地方不对,则反转方向
    如果缩短的量不够,则可以通过diffHeight参数设置, 也可以设置负数
    有时候,数据源的行名或列名可能存在相同值,这时候设置方向就很容易区分,

library(circlize)par(mfrow = c(1, 3)) # 设置绘图环境,多图布局,1行3列布局chordDiagram(mat, grid.col = grid_col, directional = 1) # 结束端要短一些
chordDiagram(mat, grid.col = grid_col, directional = 1, diffHeight = uh(5, "mm")) # 设定缩短量为5mm, uh表示传递单位
chordDiagram(mat, grid.col = grid_col, directional = -1) # 反转方向,这行名对应的端要短一些
circos.clear()

数据源的行名和列名存在相同值

library(circlize)mat2 <- matrix(sample(100, 35), nrow = 5)
rownames(mat2) <- letters[1:5]
colnames(mat2) <- letters[1:7]
mat2
chordDiagram(mat2, grid.col = 1:7, directional = 1, row.col = 1:5)
circos.clear()


如果不需要显示自我连接的弦
则更改数据源中对应的值,使该值为0

library(circlize)mat3 <- mat2
for (cn in intersect(rownames(mat3), colnames(mat3))) { mat3[cn, cn] <- 0 # 将行名和列名相同的值更改为0}
mat3 chordDiagram(mat3, grid.col = 1:7, directional = 1, row.col = 1:5) # 设置弦方向为从行名到列名,设置弦颜色
circos.clear()

link方向、箭头及高度调整

弦link有方向属性,就可以增加箭头,有2个参数可以增加箭头

  • direction.type = "arrows" 给弦增加带箭头的曲线,曲线位于弦的中心线上,默认给所有弦增加箭头

  • link.arr.col 给部分弦增加带箭头的曲线,并指定箭头的颜色,指定方式跟颜色的指定类似, 必须设置direction.type = "arrows"参数

  • link.arr.length 指定带箭头曲线中,箭头的长度

  • link.arr.type 指定箭头类型,可以用link.arr.type = "big.arrow" 产生大尺寸箭头,将箭头和箭杆合二为一

library(circlize)arr_col <- data.frame(c("S1", "S2", "S3"), c("E5", "E6", "E4"), c("black", "black", "black")) # 生成箭头的颜色3列特征数据框
chordDiagram(mat, grid.col = grid_col, directional = 1,link.arr.col = arr_col, direction.type = "arrows", link.arr.length = 0.2)
circos.clear()# 同时设置箭头和弦高diffHeight
chordDiagram(mat, grid.col = grid_col, directional = 1, direction.type = c("diffHeight", "arrows"), # 同时设置箭头和弦高link.arr.col = arr_col, link.arr.length = 0.2)
circos.clear()par(mfrow = c(1, 2))
# 指定箭头类型为大箭头
matx <-  matrix(rnorm(64), 8)chordDiagram(matx, directional = 1, direction.type = c("diffHeight", "arrows"),link.arr.type = "big.arrow") # 大箭头,箭头和箭杆合二为一
circos.clear()# 大箭头加调整弦高diffHeight
chordDiagram(matx, directional = 1, direction.type = c("diffHeight", "arrows"),link.arr.type = "big.arrow", diffHeight = -uh(2, "mm")) # 设置弦高为-2mm
circos.clear()



窄弦丢失

对于relation值相对太小,其对应的弦的宽度也非常小,对于这种极小值,在程序绘图时,会自动去除,不给予显示
可以通过reduce参数控制link宽度的下限,超出该范围的将不显示,
reduce参数为0到1的数字(包含0), 表示占所有弦宽度之和的百分比

library(circlize)# 默认移除小比例值
mat <- matrix(rnorm(36), 6, 6)
rownames(mat) <-  paste0("R", 1:6)
colnames(mat) <- paste0("C", 1:6)
mat[2, ] <- 1e-10 # 将第2行所有值改成很小的值
mat[, 3] <- 1e-10 # 将第3列所有值改成很小的值chordDiagram(mat)
circos.info() # 显示绘图的对象,不包含第2行的行名(R2)和第3列的列名(C3),则表示被移除了
circos.clear()# reduce参数调整
mat[2, ] <- 1e-2
chordDiagram(mat, reduce = 1e-3) # 控制reduce参数比C2小,则C2行不会被移除
circos.info()
circos.clear()



轨道调整

chordDiagram()默认创建2个外围轨道,一个标签(列名和行名)轨道,一个带有刻度线的网格轨道
circos.info()显示的"All your tracks"下面就是所有的轨道,

  • annotationTrack参数可以调整轨道,从c("name", "grid", "axis")中指定任意值,可以多个值,表示只显示指定的轨道,

  • annotationTrackHeight参数可以指定轨道环高,用数字向量指定,向量长度与annotationTrack参数一致

library(circlize)par(mfrow = c(1, 3)) # 多图布局,分3列排版
chordDiagram(mat, grid.col = grid_col, annotationTrack = "grid") # 只显示网格,不显示刻度线和标签轨道
chordDiagram(mat, grid.col = grid_col, annotationTrack = c("name", "grid"), # 指定显示标签和网格轨道annotationTrackHeight = c(0.03, 0.01)) # 指定标签轨道和网格轨道的环高  chordDiagram(mat, grid.col = grid_col, annotationTrack = NULL) # 移除所有轨道
circos.clear()

公众号后台回复关键字即可学习

回复 爬虫            爬虫三大案例实战  
回复 Python       1小时破冰入门

回复 数据挖掘     R语言入门及数据挖掘
回复 人工智能     三个月入门人工智能
回复 数据分析师  数据分析师成长之路 
回复 机器学习      机器学习的商业应用
回复 数据科学      数据科学实战
回复 常用算法      常用数据挖掘算法

R_circlize包_和弦图(二)相关推荐

  1. R_circlize包_和弦图

    tiltle: circlize包画和弦图 作者:Li_Yuhui 四川大学在读研究生 参考来源 文章目录 tiltle: circlize包画和弦图 作者:Li_Yuhui 四川大学在读研究生 [参 ...

  2. 使用circlize包绘制和弦图

    在写这个教程是3月16号凌晨的5点钟,这个点还没睡的话,一是在外面玩,二是有事情.我是属于第二种情况,昨晚从下班6点后一直在办公室,点了个外卖,吃结束后差不多7点.然后,就一直在弄自己的事情,一直到凌 ...

  3. acrobat xi pro 简体中文语言支持包_出图利器佳能PRO-541S绘图仪现货报价-佳能 PRO-541S_西安大幅面打印机行情...

    (中关村在线西安行情) 近日,佳能PRO-541S图文广告利器在中关村在线认证经销商"西安优杰电子(佳能授权)"处有售,联系电话:13363997297(赵经理).佳能PRO-54 ...

  4. 20岁的计算机系学生 表情包,毕竟我才二十岁表情包 - 毕竟我才二十岁微信表情包 - 毕竟我才二十岁QQ表情包 - 发表情 fabiaoqing.com...

    (白发大爷)毕竟我才二十出头啊_二十出头_白发_大爷_毕竟表情 是不是二十岁的我,注定要为没钱掉眼泪(熊猫头)_熊猫_二十岁_没钱_注定_眼泪表情 为什么我的二十岁要为减肥流眼泪(熊猫头流泪表情包)_ ...

  5. python 交互式流程图_使用Python创建漂亮的交互式和弦图

    python 交互式流程图 Python中的数据可视化 (Data Visualization in Python) R vs Python is a constant tussle when it ...

  6. R语言使用epiDisplay包的tabpct函数生成二维列联表并使用马赛克图可视化列联表(二维列联表、边际频数、以及按行、按列的比例)、自定义设置cex.axis参数改变轴标签数值的大小

    R语言使用epiDisplay包的tabpct函数生成二维列联表并使用马赛克图可视化列联表(二维列联表.边际频数.以及按行.按列的比例).自定义设置cex.axis参数改变轴标签数值的大小 目录

  7. Echats关系图les-miserables的图表详细解析(和弦图)(二)

    和弦图在实际运用中还是不可或缺的,结合echarts插件进行使用,可以提高工作效率,话不多说,上代码 配置初始化设置 这里的edgeSymbol属性是为了配置关系箭头的样式:emphasis设置了当鼠 ...

  8. 去掉图题注 空格_在Word 2010文档中为图表插入形如“图一,图二”的题注时,删除标签与编号之间自动出现的空格的最优操作方法是( )_学小易找答案...

    [判断题]矛盾有两个基本属性,一个是同一性另一个是特殊性. [单选题]小王利用Word撰写专业学术论文时,需要在论文结尾处罗列出所有参考文献或书目,最优的操作方法是( ). [单选题]"九层 ...

  9. 用计算机打出惊雷这首,惊雷表情包图片-惊雷表情包图片动图大全高清免费分享 v1.0预约_手机乐园...

    软件简介 惊雷表情包图片动图大全高清免费分享这里汇聚了当下十分火爆的喊麦表情包图片,不仅图片十分搞笑,配上的文字更是点睛之笔,不仅幽默风趣,还非常符合沙雕的气质,下面就为整理了十分全面的惊雷喊麦图片, ...

最新文章

  1. JavaScript递归
  2. python基本语法语句-python学习笔记:基本语法
  3. Windows 8.1 explorer.exe总是崩溃的解决办法
  4. 以supervisord启动elasticsearch
  5. linux——sshd服务及其管理命令
  6. 剑指offer:二维数组中的查找
  7. 《Redis开发与运维》读书笔记
  8. HU6285A升压输出12V,电流1A芯片
  9. java nio 按行读取_Java NIO按行读取文本文件
  10. 刘宇凡:坚持就是写文章的最大技巧
  11. FileBrowser文件浏览器部署
  12. Python编写一个函数,计算一个整数各个数字之和
  13. 华硕主板Z97-A无法识别intel M.2 NVME固态硬盘的解决方案
  14. CentOS7挂载NTFS分区步骤
  15. Android go app 安装包,安卓go系统刷机
  16. matlab三维图像分割,Matlab 沿三维任意方向切割CT图的仿真计算
  17. Android Battery(四) 电池管理
  18. jquery 实现背景图片循环切换,显示隐藏div
  19. YOLOv7 训练前手动计算锚定框
  20. 美国NIST公布首批后量子密码标准算法

热门文章

  1. WPF 控件专题 TextBlock 控件详解
  2. 01-旭日X3派测评——开箱测试系统烧写性能初测
  3. 天津大学计算机专业推免加分细则,天津大学计算机科学与技术学院(专业学位)计算机技术保研细则...
  4. openwrt fota
  5. 印度进口战斗机想退货,因系统无法识别自家口音
  6. JavaScript 双击禁止选中文字
  7. a12处理器和骁龙855_手机处理器排名,骁龙855只排第三,第一就是第一
  8. 【HDU 1869】六度分离
  9. 算法-- x 的平方根
  10. 面试官:[‘1‘, ‘2‘, ‘3‘].map(parseInt)的结果是什么?为甚?我:[1, 2, 3]。面试官:你不用来了。