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

如何在R Shiny中基于节点、边与权重绘制交互式网络?

在R Shiny中绘制SeqNet网络的交互式可视化

下面给你三种实用的实现方案,不管是用你已提取的nodeslist/edgeslist,还是直接用SeqNet生成的网络对象g,都能快速搞定交互式可视化:

方案一:用visNetwork包(推荐,Shiny兼容性拉满)

visNetwork专门针对交互式网络开发,支持直接用节点/边列表生成,集成到Shiny里毫无门槛。

操作步骤:

  1. 先对齐数据格式:

    • nodeslist必须包含id列(节点唯一标识),可额外加label(显示的基因名)、color(节点颜色)等自定义列;
    • edgeslist必须有from和to列(对应节点的id),weight列可用来控制边的粗细或颜色。
  2. Shiny代码示例:

library(shiny)
library(visNetwork)
library(SeqNet)

# 假设你已经生成了g、nodeslist、edgeslist
# 调整列名(根据你的实际列名修改)
nodeslist$id <- nodeslist$gene_id
nodeslist$label <- nodeslist$gene_name
edgeslist$from <- edgeslist$from_node
edgeslist$to <- edgeslist$to_node

ui <- fluidPage(
  visNetworkOutput("interactive_network", height = "800px")
)

server <- function(input, output) {
  output$interactive_network <- renderVisNetwork({
    visNetwork(nodes = nodeslist, edges = edgeslist) %>%
      # 用权重控制边的粗细
      visEdges(width = edgeslist$weight * 2) %>%
      # 添加高亮邻接节点、节点搜索功能
      visOptions(highlightNearest = TRUE, nodesIdSelection = TRUE) %>%
      visPhysics(stabilization = FALSE) # 允许手动拖拽节点调整布局
  })
}

shinyApp(ui, server)

方案二:用networkD3包(基于D3.js,视觉效果更灵活)

networkD3依赖D3.js,能做出更个性化的交互效果,只是需要稍微调整数据格式。

操作步骤:

  1. 转换数据格式:networkD3要求节点索引从0开始,边的source/target对应节点的索引值。
  2. Shiny代码示例:
library(shiny)
library(networkD3)
library(dplyr)
library(SeqNet)

# 处理节点数据:生成0起始的索引
nodes <- nodeslist %>%
  mutate(id = row_number() - 1,
         group = 1) # 可根据基因功能分组,这里默认同一组

# 处理边数据:替换成节点索引
links <- edgeslist %>%
  left_join(nodes, by = c("from" = "gene_id")) %>%
  rename(source = id) %>%
  left_join(nodes, by = c("to" = "gene_id")) %>%
  rename(target = id) %>%
  select(source, target, weight)

ui <- fluidPage(
  networkD3Output("interactive_network", height = "800px")
)

server <- function(input, output) {
  output$interactive_network <- renderNetworkD3({
    forceNetwork(
      Links = links,
      Nodes = nodes,
      Source = "source",
      Target = "target",
      Value = "weight", # 用权重控制边的粗细
      NodeID = "gene_name", # 显示节点名称
      Group = "group",
      opacity = 0.8,
      zoom = TRUE, # 允许缩放
      charge = -500 # 调整节点排斥力,避免重叠
    )
  })
}

shinyApp(ui, server)

方案三:直接转igraph快速实现

如果不想手动处理节点/边列表,直接把SeqNet的g转成igraph对象,再用visNetwork生成交互式图:

library(igraph)
library(visNetwork)

# 把SeqNet网络转成igraph对象
ig <- as.igraph(g)

# 在Shiny中调用
output$interactive_network <- renderVisNetwork({
  visIgraph(ig) %>%
    visEdges(width = E(ig)$weight * 2) %>%
    visOptions(highlightNearest = TRUE)
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:20:15