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

如何在R的NetworkD3 forceNetwork中按相关性为边着色?

解决igraph转networkD3时边属性匹配与着色问题

核心思路

通过节点名称映射将igraph中丢失的边属性(X3)准确关联到networkD3的边列表,避免手动核对;同时配置forceNetwork实现节点大小调整、节点分组着色及边的正负相关性着色。

完整代码实现

library(igraph)
library(networkD3)
library(dplyr)

# 1. 将igraph对象转换为networkD3格式,设置节点分组(细菌/真菌)
netd3 <- igraph_to_networkD3(sparcc.graph, group = ifelse(grepl("Bacteria", V(sparcc.graph)$name), "Bacteria", "Fungi"))

# 2. 添加基于betweenness的节点大小
netd3$nodes <- data.frame(netd3$nodes, nodesize = sqrt(betweenness(sparcc.graph)/3))

# 3. 提取igraph的边属性并匹配到networkD3边列表
# 提取igraph边数据(包含X3相关性属性)
edges_attr <- as_data_frame(sparcc.graph, what = "edges")

# 创建节点名称到networkD3 0-based索引的映射
node_index_map <- setNames(seq_len(nrow(netd3$nodes)) - 1, netd3$nodes$name)

# 将igraph边中的节点名称转换为networkD3的source/target索引
edges_attr$source <- node_index_map[edges_attr$from]
edges_attr$target <- node_index_map[edges_attr$to]

# 处理无向边的双向匹配(避免source/target顺序不一致导致匹配失败)
edges_attr_rev <- edges_attr %>% rename(source = target, target = source)

# 合并X3属性到networkD3边列表
netd3$links <- netd3$links %>%
  left_join(edges_attr %>% select(source, target, X3), by = c("source", "target")) %>%
  left_join(edges_attr_rev %>% select(source, target, X3), by = c("source", "target"), suffix = c("", "_rev")) %>%
  mutate(X3 = coalesce(X3, X3_rev)) %>%
  select(-X3_rev)

# 4. 定义颜色映射函数
# 节点颜色(细菌/真菌)
node_color_func <- JS('d3.scaleOrdinal().domain(["Bacteria", "Fungi"]).range(["#AC88FF", "#E7861B"])')

# 边颜色(负相关-红色,正相关-绿色)
link_color_func <- JS('function(d) { return d.X3 == "-1" ? "#FF3333" : "#33CC33"; }')

# 5. 绘制交互式网络图
forceNetwork(
  Links = netd3$links,
  Nodes = netd3$nodes,
  Source = "source",
  Target = "target",
  NodeID = "name",
  Group = "group",
  LinkGroup = "X3",
  legend = TRUE,
  colourScale = node_color_func,
  linkColour = link_color_func,
  Nodesize = "nodesize",
  zoom = TRUE,
  opacity = 0.8,
  linkWidth = 1.5
)

关键细节说明

  • 节点索引映射:networkD3使用0-based索引,而igraph的节点名称是字符串,通过node_index_map将名称转换为对应索引,确保边属性匹配准确。
  • 无向边处理:无向图的边在networkD3中可能以反向顺序存储,通过反转边的source/target并二次匹配,避免属性丢失。
  • 颜色配置:节点颜色通过colourScale绑定分组,边颜色通过自定义JS函数根据X3值动态设置,同时启用LinkGroup显示边的相关性图例。

内容的提问来源于stack exchange,提问作者co-occurringnetwork

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:07:18