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

基于STRING功能注释的igraph网络标注及孤立节点处理问询

解决方案:基因功能富集式网络可视化与孤立节点移除

一、移除无交互的孤立节点

在igraph中,孤立节点的度数为0,直接筛选并删除即可,以下是适配你现有代码的实现:

假设你的图对象名为g,执行以下代码:

# 筛选孤立节点(度数为0的节点)
isolated_nodes <- which(degree(g) == 0)
# 删除孤立节点
g_clean <- delete.vertices(g, isolated_nodes)

如果你的节点数据是单独的数据框(比如node_df),同步清理节点数据:

# 保留非孤立节点的行
node_df_clean <- node_df[!node_df$node_id %in% V(g_clean)$name, ]

验证清理结果:

# 查看清理后的节点数与边数
vcount(g_clean)
ecount(g_clean)

二、基于STRING功能注释的富集式节点标注可视化

1. 读取并处理STRING功能注释文件

首先读取string_functional_annotations.tsv,提取你关注的富集功能(比如GO生物过程、KEGG通路),这里以GO term为例:

# 读取注释文件(注意分隔符是制表符)
func_annot <- read.delim("string_functional_annotations.tsv", sep = "\t", header = TRUE)

# 筛选显著富集的功能(假设以adjusted p值<0.05为阈值)
sig_annot <- subset(func_annot, adjusted_p_value < 0.05)

# 简化注释:每个基因保留最显著的1个功能(或合并多个功能,按需调整)
top_annot <- sig_annot[order(sig_annot$adjusted_p_value), ]
top_annot_unique <- top_annot[!duplicated(top_annot$gene), ]

2. 关联注释到网络图节点

将功能注释合并到你的节点属性中:

# 假设你的节点名称存储在V(g_clean)$name中
# 匹配节点与注释
node_annot <- merge(data.frame(gene = V(g_clean)$name), top_annot_unique, by = "gene", all.x = TRUE)

# 将功能注释赋值为节点属性
V(g_clean)$func <- node_annot$functional_category # 替换为你实际的功能列名,比如go_term_name

# 给无注释的节点分配默认类别
V(g_clean)$func[is.na(V(g_clean)$func)] <- "Unannotated"

3. 绘制富集式网络图

根据功能类别设置节点颜色,添加图例,实现类似富集分析的可视化效果:

# 生成颜色映射(可自定义颜色)
func_colors <- setNames(RColorBrewer::brewer.pal(length(unique(V(g_clean)$func)), "Set3"), unique(V(g_clean)$func))

# 绘制网络图
plot(g_clean,
     vertex.color = func_colors[V(g_clean)$func],
     vertex.size = 8,
     vertex.label.cex = 0.6,
     edge.width = 0.8,
     edge.color = "gray80",
     main = "Gene Network with Functional Annotations")

# 添加功能类别图例
legend("bottomright", 
       legend = names(func_colors),
       fill = func_colors,
       cex = 0.7,
       title = "Functional Categories")

如果需要更精细的控制(比如按功能富集程度调整节点大小),可以将富集的p值或基因数作为节点大小的映射:

# 关联富集p值到节点
V(g_clean)$p_value <- node_annot$adjusted_p_value
# 用负对数p值设置节点大小
V(g_clean)$size <- -log10(V(g_clean)$p_value) * 2
# 无注释节点设置默认大小
V(g_clean)$size[is.na(V(g_clean)$size)] <- 6

# 重新绘图
plot(g_clean,
     vertex.color = func_colors[V(g_clean)$func],
     vertex.size = V(g_clean)$size,
     vertex.label.cex = 0.6,
     edge.width = 0.8,
     edge.color = "gray80",
     main = "Gene Network with Functional Annotations (Size by Enrichment Significance)")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:45:30