R高级绘图 | 不用 Cytoscape 也能绘制精美的蛋白互作(PPI)网络图啦!| STRING 网站 + R 代码

在进行 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!]

搞定!

文末碎碎念

那今天的分享就到这里啦!我们下期再见哟!

最后顺便给自己推荐一下嘿嘿嘿!

如果我的分享对你有用的话,欢迎关注点赞在看转发分享阿巴阿巴阿巴阿巴巴巴!这可是我的第一原动力!

蟹蟹你们的喜欢和支持!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144234.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

python 识别省市、区县并组建三级信息数据库

一、网址&#xff1a; 全国行政区划信息查询平台 二、分析并搭建框架 检查网页源码&#xff1a; 检查网页源码可以发现&#xff1a; 所有省级信息全部在javaScript下的json中&#xff0c;会在页面加载时加载json数据&#xff0c;填充到页面的option中。 1、第一步&#xff1a…

MATLAB系列08:输入/输入函数

MATLAB系列08&#xff1a;输入/输入函数 8. 输入/输入函数8.1 函数textread8.2 关于load和save命令的进一步说明8.3 MATLAB文件过程简介8.4 文件的打开和关闭8.4.1 fopen函数8.4.2 fclose函数 8.5 二进制 I/O 函数8.5.1 fwrite 函数8.5.2 fread函数 8.6 格式化 I/O 函数8.6.1 f…

C语言 | Leetcode C语言题解之第414题第三大的数

题目&#xff1a; 题解&#xff1a; int cmp(const void *a, const void *b) {return *(int*)a < *(int*)b; }int thirdMax(int* nums, int numsSize){qsort(nums, numsSize, sizeof(nums[0]), cmp);int diff 0;for (int i 1; i < numsSize; i) {if (nums[i] ! nums[i…

(黑马点评) 五、探店达人系列功能实现

5.1 发布和查看探店笔记 5.1.1 发布探店笔记 这块代码黑马已经完成了&#xff0c;在发布探店笔记界面&#xff0c;有两块内容是需要上传的。一是笔记内容&#xff0c;二是笔记配图。其中笔记配图部分黑马使用的是上传到本地前端服务器上面的。我我觉得可以将图片文件发布在阿里…

【靶点Talk】免疫检查点争夺战:TIGIT能否超越PD-1?

曾经的TIGIT靶点顶着“下一个PD-1”的名号横空出世&#xff0c;三年的“征程”中TIGIT走过一次又一次的失败&#xff0c;然而面对质疑和压力仍有一批公司选择前行。今天给大家分享TIGIT靶点的相关内容&#xff0c;更多靶点科普视频请关注义翘神州B站和知乎官方账号。 TIGIT的“…

如何使用Java代码实现日期的比较以及如何在列表中按照日期进行排序

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 在Java编程中&#xff0c;经常需要处理日期和时间相关的操作。本文将向您展示如何使用Java代码实现日期的比较以及如何在列表中按照日期进行排序。将通过以下几个步骤来实现这个目标&#xff1a; 理解日期比较&…

【2025】基于微信小程序的网上点餐系统设计与实现、基于微信小程序的智能网上点餐系统、微信小程序点餐系统设计、智能点餐系统开发、微信小程序网上点餐平台设计

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

C语言深入理解指针(二)

目录 指针运算指针-整数指针-指针指针的关系运算 野指针野指针成因指针未初始化指针越界访问指针指向的空间释放 如何规避野指针指针初始化注意指针越界指针不使用时就用NULL避免返回局部变量的地址 assert断言指针的使用和传址调用传址调用例子&#xff08;strlen函数的实现&a…

Euro 2024 足球中的IMU技术突破

在体育技术领域&#xff0c;IMU&#xff08;惯性测量单元&#xff09;技术正以前所未有的方式重塑足球比赛。Adidas Fussballliebe Finale足球&#xff0c;作为首个在欧洲锦标赛中采用公司“连接球技术”的官方比赛用球&#xff0c;展示了IMU技术在现代足球中的应用。以下是这款…

gitlab/极狐-离线包下载地址

如果想要使用Gitlab/极狐进行数据的恢复&#xff0c;只能使用相同版本或者相近版本的安装包&#xff0c;因此有时候需要到它的官网上下载对应版本的安装包&#xff0c;以下是我收集到的对应地址的下载路径&#xff1a; Gitlab Gitlab离线库&#xff0c; https://packages.gitl…

美国站群服务器优化技巧解析

美国站群服务器&#xff0c;作为专为管理多个网站而设计的托管解决方案&#xff0c;其优化对于提升网站性能和用户体验至关重要。以下是一些关键的优化技巧&#xff1a; 首先&#xff0c;硬件配置是基础。选择高性能的CPU、大容量的内存以及高速的硬盘(如SSD)是提升服务器运算速…

使用电容式感应原理设计的4键触摸检测IC-CT8224C

CT8224C是一款使用电容式感应原理设计的触摸IC&#xff0c;此款IC内建稳压电路给触摸感测器使用&#xff0c;稳定的感应方式可以应用到各种不同电子类产品。面板介质可以是完全绝源的材料&#xff0c;专为取代传统的机械结构开关或普通按键而设计&#xff0c;提供4个触摸输入端…

Leetcode面试经典150题-130.被围绕的区域

给你一个 m x n 的矩阵 board &#xff0c;由若干字符 X 和 O 组成&#xff0c;捕获 所有 被围绕的区域&#xff1a; 连接&#xff1a;一个单元格与水平或垂直方向上相邻的单元格连接。区域&#xff1a;连接所有 O 的单元格来形成一个区域。围绕&#xff1a;如果您可以用 X 单…

深入探究 Flask 的应用和请求上下文

目标 读完本文后&#xff0c;您应该能够解释&#xff1a; 什么是上下文哪些数据同时存储在应用程序和请求上下文中在 Flask 中处理请求时&#xff0c;处理应用程序和请求上下文所需的步骤如何使用应用程序和请求上下文的代理如何在视图函数中使用current_app和代理request什么…

vulnhub靶机:Fristileaks 详细过程

下载 下载地址&#xff1a;https://www.vulnhub.com/entry/fristileaks-13,133/ 修改网卡 网卡设置为nat模式&#xff0c;并修改mac地址为 08:00:27:A5:A6:76 信息收集 主机发现 arp-scan -l 发现靶机 IP 是 192.168.109.178 端口扫描 nmap -p- -A 192.168.109.178 目录…

CST电磁仿真77GHz汽车雷达保险杠

77G毫米波雷达仿真时&#xff0c;要考虑天线罩和保险杠的影响。通常保险杠都是多层结构&#xff0c;有的层非常薄。如果采用传统的3D建模方法&#xff0c;会导致网格数量巨大&#xff0c;进而影响到求解效率。 三维保险杠&#xff08;bumper&#xff09;模型如下图所示&…

react之jsx基础(1)概念和本质

文章目录 JSX 的基本概念1. **语法**2. **表达式**3. **属性**4. **子元素** JSX 的编译过程1. **转换成 JavaScript**2. **React 元素** JSX 的实际应用1. **组件定义**2. **组件嵌套** 总结 当然&#xff0c;以下是对 JSX 的详细讲解&#xff0c;包括其基本概念、语法、编译过…

JVM面试真题总结(十三)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ JVM的堆内存如何分区? 从垃圾收集&#xff08;Garbage Collectio…

日志框架的使用

一、日志概述 日志&#xff1a;用来记录程序运行过程中的信息&#xff0c;并可以进行永久存储。 开发过程中可能会出现以下需求&#xff1a; 希望系统能记住某些数据是被谁操作的&#xff0c;比如被谁删除了&#xff1f;想分析用户浏览系统的具体情况&#xff0c;以便挖掘用…

systemd学习

传统init进程启动流程 kernel内核代码init/main.c&#xff0c;内核启动init进程过程&#xff1a; init进程是由内核启动的第一个&#xff08;也是唯一的一个&#xff09;用户进程&#xff08;进程id为1&#xff09;&#xff0c;它根据配置文件决定启动哪些程序&#xff0c;ini…