基于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
相关产品推荐
相关产品推荐

