You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于无向邻接矩阵,使用R语言ggplot或相关包绘制目标环形图的技术咨询

解决方案:用ggraph绘制环形无向加权图

你之前踩的坑是用了dendrogram布局——这个布局是给层次树状图用的,而树是有向结构,自然会报错要求有向图。咱们换用适合无向图的环形布局,结合你的加权邻接矩阵来实现目标图形,步骤如下:

1. 数据预处理:邻接矩阵转无向图对象

首先确保你的邻接矩阵是对称的(无向图的核心要求),然后转成igraph对象时,明确指定无向模式,同时过滤掉权重为0的边(不然大量无效连接会让图乱成一团):

library(igraph)

# 假设你的邻接矩阵叫adj_matrix,已带行/列标签
# 若原矩阵不对称,先做对称化处理(无向图必须对称)
adj_matrix <- (adj_matrix + t(adj_matrix)) / 2

# 创建无向图,保留权重,自动删除0权重边(diag=FALSE去掉自环)
g <- graph_from_adjacency_matrix(
  adj_matrix,
  mode = "undirected",
  weighted = TRUE,
  diag = FALSE,
  delete.edges = "zero"
)

2. 用ggraph绘制环形布局图

用circle布局替代dendrogram的circular选项,同时根据权重的正负和绝对值设置边的颜色与粗细,让连接强度可视化:

library(ggraph)
library(ggplot2)

ggraph(g, layout = "circle") +
  # 绘制边:正负权重用不同颜色,粗细随绝对值增大而变粗
  geom_edge_link(
    aes(color = weight, width = abs(weight)),
    alpha = 0.7,  # 加透明度避免重叠边过于突兀
    edge_cap = circle(5, "mm")  # 边的端点做圆角处理,提升美观度
  ) +
  # 绘制节点:白色填充+黑色边框,突出显示
  geom_node_point(size = 6, color = "black", fill = "white", shape = 21) +
  # 添加节点标签,放在环形外侧避免重叠
  geom_node_text(
    aes(label = name),
    hjust = 1.2,
    size = 3.5,
    color = "black"
  ) +
  # 颜色映射:负权重用蓝色,正权重用红色,中间0值为灰色
  scale_color_gradient2(
    low = "#2c7fb8",
    mid = "#e0e0e0",
    high = "#d95f02",
    midpoint = 0,
    name = "Connection Strength"
  ) +
  # 边的粗细范围:可根据你的数据调整,避免太细或太粗
  scale_width(range = c(0.5, 3), name = "Absolute Strength") +
  # 去掉多余的背景和坐标轴
  theme_void() +
  # 把图例放在底部,不遮挡图形
  theme(
    legend.position = "bottom",
    legend.box = "vertical"
  )

3. 进阶优化:按聚类排序节点

如果想让相似的节点靠在一起,可先对邻接矩阵做层次聚类,再调整节点顺序,让图形逻辑更直观:

# 用层次聚类得到节点顺序
hc <- hclust(dist(adj_matrix))
node_order <- hc$order

# 重新排列图的节点顺序
g <- permute(g, node_order)

# 再运行上面的ggraph绘图代码即可

为什么之前的方法不行?

  • ggraph的dendrogram布局是为层次树结构设计的,这类结构是有向的(从根节点到叶节点),所以你的无向图会触发错误。
  • 弦图更适合展示双向流量类数据,而你的需求是无向连接的可视化,环形节点+边的布局更匹配。

内容的提问来源于stack exchange,提问作者Gian Marco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 16:23:12