本节来介绍一个R包edgebundleR,其主要作用是用来绘制交互式网络图,非常的简单甚至不用查看帮助文档,一行代码即可绘制网络图。数据+代码已经上传小编2023VIP群,加群的观众老爷请自行下载。
library(tidyverse)
# 安装所需的包 "edgebundleR"
library(edgebundleR)
library(igraph)
library(ggraph)
d <- read_tsv("data.xls")
# 获取重复的集合
sets <- unique(d$Set[duplicated(d$Set)])
# 创建一个长度为sets长度的列表
rel <- vector("list", length(sets))
# 针对每个重复的集合,创建组合数据框
for (i in 1:length(sets)) {
rel[[i]] <- as.data.frame(t(combn(subset(d, d$Set == sets[i])$ID, 2)))
}
library(data.table)
rel <- rbindlist(rel)
# 从数据框创建图形对象
g <- graph.data.frame(rel, directed = F, vertices = d)
clr <- as.factor(V(g)$Loc)
levels(clr) <- c("#DE9ED6FF", "#709AE1FF", "darkorange")
V(g)$color <- as.character(clr)
# 绘制图形,使用圆形布局,顶点大小为度的5倍,不显示顶点标签
plot(g, layout = layout.circle, vertex.size = degree(g) * 5, vertex.label = NA)
# 导入 circlize 包
library(circlize)
# 初始化 circlize 绘图环境,使用数据中的ID作为因子,设置x轴范围为0到10
circos.initialize(factors = as.factor(d$ID), xlim = c(0, 10))
# 创建轨道绘图区域,使用数据中的ID作为因子,设置y轴范围为0到0.5,背景颜色根据图中节点的颜色设定,不显示边界线,轨道高度为0.05
circos.trackPlotRegion(factors = as.factor(d$ID), ylim = c(0, 0.5), bg.col = V(g)$color,bg.border = NA, track.height = 0.05)
# 遍历每一行关系数据
for(i in 1:nrow(rel)) {
# 在圆环上绘制连接线,起始点为rel[i,1]的ID,y轴为0,终点为rel[i,2]的ID,y轴为0,线的高度为0.4
circos.link(rel[i,1], 0, rel[i,2], 0, h = 0.4)
}
edgebundle(g, tension = 0.1, cutoff = 0.5, fontsize = 18, padding = 40)
edgebundle(g)
tension: 边的张力参数,控制边的曲线度。较低的值会产生较直的边,而较高的值会产生更弯曲的边。这里设置为 0.1。
cutoff: 边捆绑的阈值参数,控制捆绑边的密度。较低的值会产生更多的捆绑边,而较高的值会产生较少的捆绑边。这里设置为 0.5。
fontsize: 边标签的字体大小。这里设置为 18。
padding: 边捆绑图的内边距,控制图形的边缘空白区域的大小。这里设置为 40。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。