40 弦图
40.1 什么是弦图?
弦图(chord diagram)又称和弦图。可以显示不同实体之间的相互关系和彼此共享的一些共通之处,因此这种图表非常适合用来比较数据集或不同数据组之间的相似性。节点围绕着圆周分布,点与点之间以弧线或贝塞尔曲线彼此连接以显示其中关系,然后给每个连接分配数值(通过每个圆弧的大小比例表示)。此外,也可以用颜色将数据分成不同类别,有助于进行比较和区分。
弦图的特点在于,它有助于我们看出数据之间的关系,适用于比较数据集或不同数据组之间的相似性。连接两个数据点的弧线可以以颜色、弧线与圆的接触面积大小为不同的维度,表达不同的数值。正因为弦图能在表达大量复杂数据的同时,尽可能把这种复杂的关系可视化,所以弦图被广泛应用于各个方面。弦图的缺点是过于混乱,尤其是当要显示太多连接的时候。
本文我们就来讨论一下弦图是如何绘制的。
40.2 绘图前的数据准备
demo数据可以在https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/Chord/data.csv下载。
数据共包含3列。前2列定义从哪到哪的连线关系,第三列是数值定义连线的粗细。
40.3 R语言怎么画弦图
library(circlize)
# 读取数据
<- read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/model/bioladder1/Chord/demoData.txt")
df
# 绘图
chordDiagram(
x = df,
grid.col = hcl.colors(11), # 颜色方案,数字向量11要和实际的数据相符
directional = 1, # 箭头方向。选项有1,0,-1
direction.type = c("arrows", "diffHeight"), # 线条两端的形状
diffHeight = -0.02, # 线条两端距离边缘的距离差
annotationTrack = c("name", "grid", "axis"), # 都绘制哪些内容,name标签;grid边缘形状;axis刻度
annotationTrackHeight = c(0.05, 0.08), # 标签距离图形的距离; 环形边缘的宽度
link.arr.type = "big.arrow", # 形状"curved", "triangle", "circle", "ellipse".
link.sort = TRUE, # 内部排序
link.largest.ontop = TRUE, # 控制添加链接的顺序,是否基于绝对值?
transparency = 0.25 # 线条透明度
)# 更多参数?chordDiagram查看
40.3.1 附录:拓展加强(可选)
# 附录 拓展
# 1.修改数据标签和坐标轴
circos.trackPlotRegion(
track.index = 1,
bg.border = NA,
panel.fun = function(x, y) {
= get.cell.meta.data("xlim")
xlim = get.cell.meta.data("sector.index")
sector.index # 添加数据标签
circos.text(
x = mean(xlim),
y = 3.2,
labels = sector.index,
facing = "bending",
cex = 1
)# 添加坐标轴
circos.axis(
h = "top",
major.at = seq(from = 0, to = xlim[2], by = ifelse(test = xlim[2]>10, yes = 2, no = 1)),
minor.ticks = 1,
major.tick.percentage = 0.5,
labels.niceFacing = FALSE)
})
# 2.调节边距,起始角度,间隔角度等参数
circos.par(start.degree = 90,
gap.degree = 4,
track.margin = c(-0.1, 0.1),
points.overflow.warning = FALSE)
circos.clear()
40.4 BioLadder生信云平台在线绘制弦图
不想写代码?可以用BioLadder生信云平台在线绘制弦图。