使用R语言绘制string蛋白互作图
2020-08-29 本文已影响0人
柳叶刀与小鼠标
STRING是已知和预测的蛋白质-蛋白质相互作用的数据库。交互包括直接(物理)关联和间接(功能)关联。数据库包含来自众多来源的信息,包括实验资料库,计算预测方法和公共文本集。每次互动都与组合的置信度相关综合各种证据的分数。目前,涵盖了超过百万种蛋白质生物。STRING数据库可用于在基因列表中添加含义。STRINGdb R软件包,以方便用户访问STRING中的数据库。在本指南中,以示例说明了该软件包的大多数功能。此外,iGraph包作为代表蛋白质-蛋白质相互作用网络的数据结构。
首先,首先知道所拥有生物的NCBI分类标准标识符(例如,人类使用9606,小鼠使用10090)。如果不知道,可以搜索NCBI分类法或开始查看。因此,如果物种不是人类,则可以在STRING网页的“有机体”部分(下找到该物种及其分类学标识符页面有效表格=生物)或在STRING网站的下载部分下载完整列表。
-
加载包
##########################################################
##########################################################
# if (!requireNamespace("BiocManager", quietly = TRUE))
# install.packages("BiocManager")
#
# BiocManager::install("STRINGdb")
library(STRINGdb)
library(tidyverse)
library(clusterProfiler)
library(org.Hs.eg.db)
library(STRINGdb)
library(igraph)
library(ggraph)
getwd()
- 注释基因名
##########################################################
##########################################################
string_db <- STRINGdb$new( version="10", species=9606,
score_threshold=700, input_directory="")
STRINGdb$methods()
# score_threshold是蛋白互作的得分,
# 此值会用于筛选互作结果,400是默认分值,
# 如果要求严格可以调高此值。自己调即可
gene <- read.csv('dat.csv', header = T)
gene <- gene$gene
gene <- gene %>% bitr(fromType = "SYMBOL",
toType = "ENTREZID",
OrgDb = "org.Hs.eg.db",
drop = T)
- 绘制string互作图
##########################################################
##########################################################
data_mapped <- gene %>% string_db$map(my_data_frame_id_col_names = "ENTREZID",
removeUnmappedRows = TRUE)
string_db$plot_network( data_mapped$STRING_id )
- 利用ighraph包绘图
##########################################################
##########################################################
data_links <- data_mapped$STRING_id %>% string_db$get_interactions()
# 转换stringID为Symbol,只取前两列和最后一列
links <- data_links %>%
mutate(from = data_mapped[match(from, data_mapped$STRING_id), "SYMBOL"]) %>%
mutate(to = data_mapped[match(to, data_mapped$STRING_id), "SYMBOL"]) %>%
dplyr::select(from, to , last_col()) %>%
dplyr::rename(weight = combined_score)
# 节点数据
nodes <- links %>% { data.frame(gene = c(.$from, .$to)) } %>% distinct()
# 创建网络图
# 根据links和nodes创建
net <- igraph::graph_from_data_frame(d=links,vertices=nodes,directed = F)
# 添加一些参数信息用于后续绘图
# V和E是igraph包的函数,分别用于修改网络图的节点(nodes)和连线(links)
igraph::V(net)$deg <- igraph::degree(net) # 每个节点连接的节点数
igraph::V(net)$size <- igraph::degree(net)/5 #
igraph::E(net)$width <- igraph::E(net)$weight/10
##########################################################
##########################################################
ggraph(net,layout = "linear", circular = TRUE)+
geom_edge_arc(aes(edge_width=width), color = "lightblue", show.legend = F)+
geom_node_point(aes(size=size), color="orange", alpha=0.7)+
geom_node_text(aes(filter=deg>1, label=name), size = 3, repel = F)+
scale_edge_width(range = c(0.2,1))+
scale_size_continuous(range = c(1,10) )+
guides(size=F)+
theme_graph()
但是个人感觉绘制出来的图片依然没有cytoscape软件功能强大,建议还是string网页+cytoscape的方法来绘制。