看我看我嘿嘿嘿!
在进行 PPI 网络图绘制时,我们通常会将 STRING 网站与 Cytoscape 软件结合使用。但是经常有小伙伴们苦恼,不太会用 Cytoscape 软件进行处理可咋整呐!之前我也吭哧吭哧学了点 Cytoscape,后来偶然的一个机会,我发现可以直接用 R 处理!!!图图也很漂亮的!当然,可能不如 Cytoscape 功能那么强大哈哈哈哈哈哈!但是对于咱们日常简单的图图处理来说是完全足够的!而且简单易学!这不,今天我就分享给大家!希望对大家有所帮助!!!
如果小伙伴们有需求的话,可以加入我们的交流群:一定要知道 | 永久免费的环境友好型生信学习交流群又双叒叕来啦!| 伴随不定期群友好物分享!在这里,你可以稍有克制地畅所欲言! 超级建议大家在入群前或入群后可以看一下这个:干货满满 | 给生信小白的入门小建议 | 掏心掏肺版!绝对干货满满!让你不虚此看! 如果有需要个性化定制分析服务的小伙伴,可以看看这里:你要的个性化生信分析服务今天正式开启啦!定制你的专属解决方案!全程1v1答疑!!绝对包你满意!
啊,这波好像不需要什么原理介绍哈(有需要咱们后期专门安排一期),主要是为了分享如何 R 直出图哈哈哈哈哈哈哈哈,那咱们,直接开始?好!开始!!!
今天用到的数据,我已经上传到了GitHub,大家可以在公众号后台回复
PPI
,即可获得存放这些数据的链接(其中还包括之前在看完还不会来揍/找我 | 差异分析三巨头 —— DESeq2、edgeR 和 limma 包 | 附完整代码 + 注释中得到的结果,用来标注上下调基因)。不过我在分享过程中也会把每一步的输入数据和输出结果进行展示,大家可以作为参考并调整自己的数据格式,然后直接用自己的数据跑,也是没有任何问题的!
STRING 网站
STRING 介绍
官网:https://cn.string-db.org/
哎!抱歉!这里不想介绍了!感觉详细介绍一下,这篇分享就重点偏移啦!咱们下次再详细介绍 STRING 数据库好不好!好!!!嘿嘿嘿,谢谢大家支持!!!
STRING 使用
通过上面的介绍,咱们可以知道 STRING 网站的输入数据是基因列表,大家一定有自己的数据哈哈哈哈哈哈哈,直接用就好啦!我这里的话,就用之前差异分析得到的数据啦,顺便自己编造了一个基因列表哈哈哈哈哈哈(数据到用时方恨少呐,准备分享的时候,才发现自己想要找个合适的基因列表还蛮不容易的哈哈哈哈哈哈哈)!
############################## PPI 网络 ##################################
# 数据准备,这里我用了我自己随便搞的 gene list,标注上下调基因用到了之前在差异分析中得到的结果,有需要的小伙伴们可以按提示获取(见上文)!
# 大家也可以直接使用自己的 gene list 去 string 进行分析!
# 这是我的 gene list
gene_list <- read.table("./data/gene_list.txt")
gene_list
# V1
# 1 ADH1B
# 2 ADIPOQ
# 3 ANGPTL7
# 4 APOB
# 5 AQP7
# 6 ATP1A2
# 7 C14orf180
# 8 CA4
# 9 CD300LG
# 10 CHRDL1
# 11 CIDEA
# 12 CIDEC
# 13 COL11A1
# 14 COL10A1
# 15 DLK1
# 16 FABP4
# 17 GLYAT
# 18 GPD1
# 19 IBSP
# 20 MMP1
# 21 MMP11
# 22 MMP13
# 23 PCK1
# 24 PLIN1
# 25 PLIN4
# 26 RBP4
# 这个用来后续标注上下调基因,其实没有这个也是可以的,无非就是图图上不标注上下调信息而已嘛,看大家需求啦!
load("./data/DEG_limma_voom.Rdata")
head(DEG_limma_voom)
# logFC AveExpr t P.Value adj.P.Val B
# FIGF -5.984847 -0.7193930 -51.67041 1.843289e-309 4.938355e-305 698.5939
# CA4 -6.844833 -2.5701167 -44.96985 3.340380e-261 4.474605e-257 587.5876
# PAMR1 -3.989305 2.3605059 -44.85958 2.161519e-260 1.665003e-256 585.9261
# LYVE1 -4.786578 1.3531474 -44.85132 2.485914e-260 1.665003e-256 585.7724
# CD300LG -6.537456 -0.0898487 -43.57667 6.384798e-251 3.421102e-247 564.1320
# SDPR -4.600471 2.7186631 -43.38389 1.712581e-249 7.646961e-246 560.8745
现在咱们进入 STRING 网站(https://cn.string-db.org/),直接把上面的基因列表复制进去就好啦!记得选择Multiple proteins
(红色框框),因为咱们是多个嘛!然后把复制的基因列表粘贴到绿色框框部分就好啦!然后点击SEARCH
(橙色箭头)!
铛铛铛铛!出现这个页面!咱们点击CONTINUE
!继续!
!初步的 PPI 网络图来咯!!!
现在咱们就得到经典的 PPI 网络图啦!其实咱们还可以各种调整,通过下面的Settings
。
咱们这里简单介绍一下网络视图下方的这几个选项,下次再详细介绍嘿嘿嘿!
Legend(图例):这个选项展示了网络图中使用的各种符号、颜色和线条的含义。图例帮助我们理解不同类型的蛋白质相互作用(如实验验证的相互作用、数据库中已知的相互作用、预测的相互作用等),以及蛋白质节点的属性(如节点颜色代表的功能类别)。 Settings(设置):在这个选项中,我们可以调整网络图的显示参数。例如,可以选择显示或隐藏不同类型的相互作用,调整相互作用的置信度阈值,改变网络图的布局,或者自定义图形的外观(如节点和边的颜色、大小等)。 Analysis(分析):该选项提供了一系列分析工具,用于深入分析所选的蛋白质网络。我们可以执行功能富集分析、路径分析、聚类分析等。这些分析帮助我们理解网络中蛋白质的生物学意义、共同参与的生物过程以及潜在的功能模块。 Exports(导出):这个选项允许我们将当前的网络图或分析结果导出为不同的文件格式,例如图片格式(PNG、SVG等)或文本格式(TSV、Excel等)。这使得我们能够将数据用于报告、演示或进一步的分析。 Clusters(聚类):该选项显示了STRING自动识别出的蛋白质聚类模块。这些聚类通常代表蛋白质间的紧密相互作用群组,可能参与相同的生物学过程或功能路径。我们可以通过这一功能识别和分析网络中的功能模块。 More(更多):这个选项通常用于显示更多的细节或选项。当点击“More”时,可能会展开隐藏的内容,如额外的分析工具、数据视图、设置选项或附加的蛋白质相互作用信息。它帮助我们访问更深入的功能或查看更详细的结果。 Less(更少):这个选项与“More”相反,用于折叠或隐藏不必要的细节。当点击“Less”时,已经展开的额外信息或选项会被收起,使界面更简洁。这对于简化视图、减少干扰信息非常有用,尤其是在我们不需要查看所有详细内容时。
我们导出需要的文件,点击Exports
,然后点击下面的as tabular text output:download
,上面那个是简略版的,咱不要!然后咱们就可以得到文件string_interactions.tsv
。
接下来!咱们不需要 Cytoscape,直接打开你的 RStudio!开工!
R 代码直接处理
STRING 处理结束,咱们开始画图图啦!
##################### STRING 处理结束,开始画图图啦!###########################
# 首先加载我们需要的包包,没有安装的小伙伴们记得安装一下哟!
library(igraph)
# 读取从 STRING 得到的蛋白互作数据
links <- read.delim("./data/string_interactions.tsv")
# 构建无向图,仅选择节点列和边权重列
network <- graph_from_data_frame(d = links[, c(1, 2, 13)], directed = FALSE)
# 计算节点的度数(连接数量)
deg <- degree(network, mode = "all")
# 提取唯一的基因列表
genes <- unique(links$X.node1) %>% as.data.frame()
colnames(genes) <- "gene"
# 筛选出与基因列表匹配的差异表达基因
DEG_filtered <- DEG_limma_voom %>%
filter(rownames(DEG_limma_voom) %in% genes$gene) %>%
mutate(gene = rownames(.)) %>%
select(gene, logFC)
# 结合基因列表与 DEG 数据,基于 logFC 值分组(上下调)
nodes <- genes %>%
inner_join(DEG_filtered, by = "gene") %>%
mutate(group = ifelse(logFC > 0, "up", "down"))
# 使用新的节点数据构建网络图
network <- graph_from_data_frame(d = links, vertices = nodes, directed = FALSE)
# 为节点分配颜色,基于分组信息
my_color <- c("#66C2A5", "#FC8D62", "#8DA0CB")[as.numeric(as.factor(V(network)$group))]
# 保存网络图为 PDF 文件
pdf(file = "./figure/ppi_network.pdf", width = 8, height = 8)
# 设置图形参数并绘制网络图
par(bg = "white", mar = c(0, 0, 0, 0))
plot(network,
vertex.size = deg, # 根据度数调整节点大小
layout = layout.circle, # 使用圆形布局
vertex.color = my_color, # 节点颜色
vertex.label.cex = 0.9, # 标签字体大小
vertex.label.color = "black", # 标签颜色
vertex.frame.color = "transparent", # 节点边框颜色
edge.width = E(network)$combined_score * 3, # 边宽度
edge.curved = 0.3) # 边的弯曲程度
# 添加图例,显示基因分组信息
legend(x = 1, y = 1,
legend = unique(V(network)$group),
col = unique(my_color),
bty = "n", # 无边框
pch = 20, # 点形状
pt.cex = 3, # 点大小
cex = 0.8, # 文本大小
text.col = "black", # 文本颜色
horiz = FALSE, # 垂直排列图例
y.intersp = 1.5) # 图例项间距
# 关闭设备,完成 PDF 文件保存
dev.off()
(o゜▽゜)o☆[BINGO!]
搞定!
文末碎碎念
那今天的分享就到这里啦!我们下期再见哟!
最后顺便给自己推荐一下嘿嘿嘿!
如果我的分享对你有用的话,欢迎关注点赞在看转发分享阿巴阿巴阿巴阿巴巴巴!这可是我的第一原动力!
蟹蟹你们的喜欢和支持!!!