☰
STRING+Cytoscape构建PPI网络全流程实战与避坑指南
2026/10/5 1:18:10 网站建设 项目流程

做蛋白相互作用分析,绕不开两个工具:STRING和Cytoscape。我在研究生阶段第一次接触PPI网络构建时,被这两个工具折磨得不轻——STRING数据库的导出格式搞不清楚,Cytoscape的样式映射一头雾水,做出来的网络图丑得没法放进论文。后来帮同门处理了几次类似问题,又陆陆续续在多个项目里复盘迭代,才算把这条分析链路跑得又稳又快。这篇内容就是我从零开始跑通"String+CytoScape构建PPI网络"全流程的经验总结,覆盖参数怎么调、格式怎么选、图怎么美化、网络怎么分析,以及常见报错怎么解决。适合刚接触组学数据分析的研究生,也适合需要批量处理多组PPI分析的科研老手,照着操作就能复现出一张能投稿的PPI网络图。

1. 构建PPI网络的思路拆解:先搞清楚你要回答什么问题

1.1 一个典型研究场景的还原

先还原一个最常见的场景:你通过转录组测序筛出了一批差异表达基因,或者从GEO数据库下载了某个疾病的数据集做WGCNA,拿到了核心基因列表。这时候审稿人或者导师大概率会问一句话:"这些基因之间有没有相互作用?它们是不是聚集在某个功能模块里?"要回答这个问题,就必须把基因层面的静态列表,升级成蛋白质层面的动态互作网络。

PPI网络(蛋白质-蛋白质相互作用网络)就是把每个蛋白质当作一个节点,把蛋白质之间的物理结合或功能关联当作一条边,最后构成一张网络图。这张图能帮你做三件事:第一,找出在网络中连接度极高的核心蛋白(hub gene),这类蛋白往往是疾病机制里的关键角色;第二,看你的候选基因群体内部是否紧密聚集,如果它们明显抱团,说明这些基因可能协同参与某条信号通路;第三,结合后续的富集分析,把网络模块和通路串起来,形成一条完整的分子机制证据链。

我自己常用的分析路径是:差异基因列表 → STRING构建PPI关系 → Cytoscape可视化和模块分析 → 筛选hub基因 → 回到原始数据验证表达量。这一套组合拳做下来,既能在生信分析部分展示工作量,又能为后续湿实验提供明确的方向。

1.2 STRING和Cytoscape的分工逻辑

很多初学者搞不清楚,为什么偏偏是这两个工具搭配使用,而不是一个工具搞定所有事情。这得从两者的定位差异说起。

STRING(Search Tool for the Retrieval of Interacting Genes/Proteins)本质上是一个数据库加检索平台。它的核心价值在于整合了海量的蛋白质互作证据——包括实验验证的物理结合、通路数据库的注释、共表达数据、文本挖掘结果等等,然后给每一对蛋白之间的互作关系打一个综合置信度分数。你只需要输入基因列表和物种信息,它就能帮你算出哪些蛋白之间存在潜在互作。但STRING的短板也很明显:它的可视化交互能力比较弱,网络图的布局算法有限,节点样式调整空间小,也没办法做深度的网络拓扑分析。

Cytoscape则是一款专业的网络可视化与分析软件。它本身不生产互作数据,而是负责把互作关系呈现出来。它的核心优势是灵活的视觉映射系统——你可以把节点的度、表达量、功能模块等属性映射到尺寸、颜色、透明度等视觉参数上,也可以调用各种插件做聚类、富集、路径分析。再加上开源的插件生态,Cytoscape几乎成了生信论文中网络图的工业标准。

所以标准的工作流就是:用STRING负责"找关系",用Cytoscape负责"展示和分析关系"。一个出数据,一个出成果,分工明确。

2. STRING数据库检索实操:参数选对了,后面的路才顺畅

2.1 物种选择和基因名输入的关键细节

STRING的主页地址是string-db.org,页面很简洁,核心就是一个搜索框加物种选择下拉菜单。但恰恰是在这个看似简单的环节,新手最容易翻车。

先说物种。下拉菜单默认的物种是Homo sapiens,如果你研究的是小鼠、斑马鱼或者植物,一定要手动切换。我踩过最惨的一次坑就是忘了切换物种,结果用人源数据库去检索水稻基因,返回来的结果全是同源的动物蛋白,完全没法用。切换方式有两种:一种是在下拉菜单里直接搜索物种的拉丁名或者常用英文名,另一种是直接输入NCBI Taxonomy ID——比如人类是9606,小鼠是10090,拟南芥是3702。用Taxonomy ID更精确,因为有时候不同数据库中物种命名方式有差异,直接用ID可以避免重名歧义。

再说基因名输入格式。STRING默认接受的是基因Symbol(比如TP53、EGFR),但如果你手上是用Ensembl ID或者UniProt ID标记的基因列表,也可以直接粘贴进去,STRING会自动做映射转换。这里有一个重要的细节:如果是多个基因,每行放一个基因名或者用回车分隔,不要用逗号隔开。逗号在某些场景下会被STRING识别为基因名的一部分,导致检索失败或返回空结果。

另外,如果你的基因列表里有不少别名(Alias),比如同一个基因在不同文献里叫不同的名字,建议先统一成官方Symbol再上传。实际操作中我一般会用DAVID或者UniProt的ID转换工具先做一轮标准化,确保输入列表干净可靠。这一步虽然多花几分钟,但能有效避免下游分析里出现莫名其妙的"孤儿节点"。

2.2 置信度阈值怎么选:不要无脑用默认值

STRING在生成网络时有一个核心参数叫confidence score(置信度分数),取值范围是0到1,反映的是两个蛋白之间存在互作的综合概率。结果页面左上角的"Settings"里可以调整这个阈值,默认值是0.4,对应的是"medium confidence"。

这个阈值直接决定你的网络规模和整体的可信度。阈值设得低(比如0.15),网络会非常庞大,因为很多低置信度、可能是噪声的互作关系都会被纳入;阈值设得高(比如0.9),网络会非常精简,只保留实验验证充分或者多证据支持的强互作关系,但代价是会丢掉一些真实的弱信号。

我个人的经验法则是这样:如果只是做一个大致的网络预览,看候选基因之间有没有关联,用默认的0.4就够了;但如果目标是发文章、做后续的模块分析和hub基因筛选,建议至少把阈值提到0.7(high confidence)。实际操作中,我通常会分别在0.4、0.7、0.9三个阈值下各导出一份网络数据,对比一下网络规模的变化。如果某个阈值下网络突然从几百个节点骤减到几十个,说明你的目标基因之间本来就不是强互作网络,这时候反而要认真考虑结果怎么解读。

这里还要提一个隐藏的选项:网络展示的背景互作层。STRING生成网络时,除了你的输入基因之间的互作,它还会自动补充一些与输入基因相关的其他蛋白(网络中的灰色节点),这些节点是按"第一层扩展"的方式加进来的。如果你只需要分析输入基因内部的关系,在Settings里把"network type"改成"no additional nodes";如果希望看看输入基因的邻近调控网络,那就保持默认的扩展模式。我的建议是:核心分析用"no additional nodes"模式,确保网络里的蛋白都来自你的输入列表;如果想做扩展分析,就再导出一份带扩展节点的网络数据做对照。

2.3 结果页面信息解读与导出格式选择

检索完成后,STRING会展示三个主要板块:网络可视化图、预测的互作边列表、以及基因的GO/KEGG富集分析结果。很多新手只盯着网络图看,忽略了底下表格区的大量信息。实际上,那个"Exports"按钮才是整个页面的精华所在。

点击"Exports"后,你会有几种导出选项:TSV格式的互作对列表、PNG/SVG格式的网络图片、以及PSI-MI等标准交换格式。对于后续Cytoscape分析来说,我强烈建议下载TSV格式的互作关系文件(包含node1、node2、combined score三列就够了)。不要截图保存网络图,因为STRING自带的图形在Cytoscape里导入后往往会出现布局错乱的问题,直接以TSV数据导入再重新布局,效果反而更好。

导出TSV时还要注意一个细节:文件里会包含一个"node1"和"node2"的列,以及score列。有些版本还会默认带上其他注解列,比如"node1 external ID"、"node2 external ID"之类的。为了让数据更干净,建议在导出之前先在"Exports"选项里选择"as simple tabular text output",这样得到的就是精简的三列格式,导入Cytoscape时几乎不需要额外清洗。

3. Cytoscape可视化实操:把数据变成能发表的高质量网络图

3.1 网络导入的两种方式和避坑指南

Cytoscape的安装就不多说了,官方下载对应操作系统的安装包,一路默认安装就行。目前我常用的是3.10.x版本,稳定性和插件兼容性都表现均衡。

打开Cytoscape之后,导入网络数据主要有两种方式。第一种方式是从STRING的Export面板直接获取Cytoscape专属格式:在STRING结果页面的"Exports"选项里,有一个"Cytoscape (Excel/Local)"的按钮,点击会下载一个带交互格式的包;但我实际操作下来,这个功能在不同浏览器上的表现不太稳定,有时候下载下来的文件格式不对。所以我更推荐第二种方式:直接用自己导出的TSV互作对文件。

操作路径是:File → Import → Network from File,然后选择你下载的TSV文件。此时Cytoscape会弹出一个导入预览面板,这是关键一步——你需要手动确认"Source Node"列对应的是node1,"Target Node"列对应的是node2,而score列被识别为边的属性列。如果Cytoscape自动识别有误,比如把gene symbol列当成了属性列,那就需要在下拉菜单里手动指定。这一步做不对的话,后面导进来的网络会变成一个节点都没有的"空网络"或者全是孤立点的废网络。

导入完成后,左侧的Control Panel里会列出当前网络的名称,主窗口会弹出一些散布的节点。此时网络还是"原始状态",所有节点挤成一团,看不出任何结构。不用慌,接下来要做的是布局优化。

3.2 布局算法选择:别让网络图变成蜘蛛网

Cytoscape内置了十几种布局算法,各有各的适用场景。对PPI网络来说,我用了这么多次,最推荐的是yFiles Organic Layout,其次是默认的Prefuse Force Directed Layout。前者的布局更加自然,能把模块化的聚类结构清晰展现出来;后者对节点数量较多的网络效率更高。

操作路径是:Layout → yFiles Layouts → Organic。点击后稍等几秒,原本挤成一团的点会自动散开,互作紧密的蛋白会聚集在一起,形成一个个肉眼可见的模块。如果你装了yFiles插件但Layout菜单里找不到,需要到Apps菜单里确认插件已经加载。

如果网络特别大(超过500个节点),yFiles Organic布局可能会比较慢,此时可以先切换到Edge-weighted Spring Embedded Layout,把边的权重设为score,这样网络会按互作强度自动拉近或推远节点。等布局基本稳定后,再手动微调个别节点的位置。我自己的习惯是:先用一次Organic Layout做初始布局,如果某个模块内的节点仍然重叠,就手动拖动调整一下,然后保存成Cytoscape的session文件(.cys格式),方便后续随时回来修改。

布局完成后记得做一件事:查看网络的连通性。通过Tools → Analyze Network,Cytoscape会计算整个网络的节点数、边数、平均度、网络直径等指标。这里可以快速发现一个常见问题——如果网络中有大量孤立节点(度数为0),说明这部分基因在STRING里没有找到任何互作伙伴,这在P<0.05的差异基因列表里很常见。孤立节点要不要保留,取决于你的分析目的:如果做全基因组的背景网络展示,保留;如果聚焦分析核心互作模块,可以筛选掉。

3.3 样式映射:让节点大小、颜色和数据属性关联起来

一张优秀的PPI网络图,绝对不是所有节点都长一个样。Cytoscape的核心卖点正是"视觉映射"——把数据表的数值映射成视觉参数。

在左侧Style面板(通常位于Control Panel的Style选项卡)里,你可以看到一系列视觉属性映射选项。最常用的是三个映射:Node Size映射到Degree(连接度)、Node Fill Color映射到某个数值型属性(比如logFC、表达量)、Edge Stroke Width映射到combined score。

操作细节如下:在Style面板找到Size属性,点击旁边的Map按钮,选择Column为"Degree",Mapping Type选"Continuous Mapping",再设置一个合适的数值范围(比如最小20、最大80)。这样度数高的hub节点就会自动变大,一眼就能识别出来。同理,Fill Color可以映射到基因的表达变化倍数,用从蓝到红的连续渐变色板,低表达用蓝色、高表达用红色,直观展示差异趋势。Edge的粗细则映射到combined score,互作置信度越高的边越粗。

做样式映射时我一直遵守一个原则:每个视觉维度只传达一类信息。节点大小代表度、节点颜色代表表达量、边粗细代表互作强度,三件事互不干扰。如果贪心,把所有属性都映射一遍,出来的图反而信息过载,读者根本抓不住重点。

样式调好之后,别忘了导出高分辨率图片。Cytoscape的File → Export → Network to Image支持PNG、PDF、SVG等格式。如果是投稿用,强烈建议导出PDF或SVG矢量图,放到AI里稍作编辑也不会失真;如果只是汇报用,600dpi的PNG也够了。另外,可以在Style面板的"Def"标签里把节点标签(Label)打开,映射到基因名,导出的图就带基因标签,不需要后期在PS里手动添加。

4. 网络拓扑分析与核心模块挖掘:不只是画图,更要算出故事

4.1 Network Analyzer:三个必看的拓扑指标

Cytoscape自带的Network Analyzer工具是分析网络拓扑性质的基础。在Tools → Analyze Network里点击后,它会自动计算每个节点的各类拓扑参数。我每次做PPI分析,必看三个指标:Degree(度)、Betweenness Centrality(介数中心性)、Closeness Centrality(接近中心性)。

Degree是最直观的,就是一个节点连接的边的数量。度高的节点就是你筛选hub基因的主要候选对象。但光看度还不够,因为一个蛋白可能在网络里链接了很多伙伴,但那些伙伴之间也有各自的联系,这个蛋白未必是网络中的关键桥梁。这时候就要看Betweenness Centrality,它衡量的是一个节点出现在多少对节点最短路径上。介数高的节点即使度数不算最高,也可能是连接两个功能模块的关键"桥梁蛋白",敲低它可能会同时破坏两条子网络。

Closeness Centrality衡量的是一个节点到网络中其他所有节点的平均最短距离,反映它在网络信息传递中的可达性。接近中心性高的蛋白通常是网络的核心信息中转站。在实操中,我会把这些参数导出到Node Table里,然后按Betweenness或Degree排序,取前10到20个作为候选hub基因。

对参数的计算逻辑,我想多说一句:Cytoscape里这些指标的计算是基于网络拓扑的数学定义,不依赖任何实验数据,所以它反映的是这个网络的"结构重要性",而不是"生物学重要性"。它帮你圈定范围,最后的生物学验证还得靠实验,别把生信分析的结果当成最终结论。

4.2 MCODE插件:快速鉴定功能模块

识别网络中的聚类模块,是PPI分析的重头戏之一。做法有很多,但最常用的插件是MCODE(Molecular Complex Detection)。它的原理是基于节点连接的紧密程度来找密集连接的子图,对应到生物学上往往就是蛋白质复合体或功能模块。

安装方式:Apps → App Manager,搜索MCODE,一键安装。装好后在Apps菜单里打开MCODE面板,设置参数时,我常用的参数是:Degree Cutoff=2,Node Score Cutoff=0.2,K-Core=2,Max Depth=100。这些参数的意思是:参与聚类分析的节点度数至少为2,节点得分不低于0.2,聚类内部的核心连通性要达到2。跑完后MCODE会列出若干聚类模块,每个模块都有独立的成员列表和得分。

拿到模块列表后,典型的分析套路是:把模块里的基因导出,分别做GO和KEGG富集分析,看每个模块富集到哪些功能类别。这样一来,网络分析就从"视觉层面"升级到了"功能层面"。在实际操作中,我遇到过很多次这种情况:整个PPI网络看起来都围着某个hub转,但MCODE却能精准地把它拆成两三个不同的功能模块——一个对应细胞周期调控,一个对应免疫应答,一个对应代谢过程。这种拆分后的信息量,远比一张孤零零的大网络图丰富得多。

4.3 筛选hub基因的经验标准和后续验证

hub基因筛选,说到底是定一个"什么样的节点值得关注"的标准。网络上流传的常见做法是取degree排名前10的基因,或者取degree值大于所有节点degree平均值加2倍标准差。但我实际操作下来的感受是:这些一刀切的标准在真实数据里经常不适用。网络结构不同、节点数不同、边的分布不同,同样的阈值可能过于激进或过于保守。

我自己的做法是分层筛选:第一步,用degree取前20%的节点作为初筛候选;第二步,在初筛结果里综合比较Betweenness Centrality和Closeness Centrality,优先选两个指标都排名靠前的节点;第三步,回到STRING数据库里单独查看这些hub基因的详细互作证据,如果它的互作关系中包含实验验证级别的边(即STRING里的evidence包含experiments数据),就加分。最后得到的hub基因列表一般是5到10个,数量适中,不会多到没法逐一验证,也不会少到显得武断。

筛选完成的hub基因,一定要回到原始数据里做表达量验证。我的做法是将hub基因的表达量数据(比如从转录组里提取的TPM值或FPKM值)做热图或者箱线图,比较样本组之间的差异。这一步的意义在于:网络分析只告诉你"哪些蛋白在互作层面很核心",表达分析告诉你"这些核心蛋白在你的实验条件下是否有差异",两者结合才真正指向了有生物学意义的候选靶点。

5. 常见问题与排查技巧实录:这些坑我替你踩过了

5.1 STRING检索阶段的高频报错

先集中回答几个在STRING环节经常遇到的问题。

第一个问题是"我输入的基因名,STRING返回了很多找不到记录的结果"。这种情况大概率是基因名格式问题。某个基因在不同数据库里可能用不同的Symbol表示,比如人类基因"HER2"在NCBI的官方Symbol其实是"ERBB2"。解决方法是在UniProt或NCBI Gene数据库里把基因名统一转换成官方Symbol,再重新检索。

第二个问题是"检索出来的网络里只有几个节点,其他基因全都不见了"。这种情况一般是你的基因列表里只有少数基因存在互作关系,其他基因既没有直接互作也没有通过别的蛋白产生间接联系。这时候可以把阈值降到0.15再试一次,如果仍然只有少量节点,就得接受"这批基因在蛋白互作层面确实比较独立"的事实,在文章中如实描述分析结果即可,不必强行制造网络。

第三个问题是"我想分析几十个物种的PPI,一个一个在网页上操作太慢了"。推荐使用STRING的API接口,Python脚本或者R语言的STRINGdb包都可以批量实现。只需要用你的物种Taxonomy ID和基因列表发起请求,返回的就是标准化的互作TSV文件。批量操作虽然省时间,但注意请求频率不要太高,不然会被数据库限制访问。

5.2 Cytoscape导入和可视化的常见问题

导入阶段最容易出的问题是"导完TSV文件后,网络里只有一个节点"或者"显示导入成功但画布是空的"。出现这种情况,十有八九是在Import预览阶段把属性列搞混了。记得检查导入面板里Source Node和Target Node两列是否准确指定。如果分析文件里没有表头列,Cytoscape会默认把第一列作为Source Node,第二列作为Target Node,此时如果你的原始文件顺序不是这样的,就需要手动调整。

另一个高频问题是"布局之后节点还是一团乱"。这种情况经常发生在节点数量多、且互作关系复杂的情况下。我的建议是:先通过Tools → Filter,筛选出degree大于等于某个阈值的子网络,先对这个子网络做布局,等结构清晰了再把其他低度节点添加回来。这个方法在处理1000个以上的节点时特别有效。

第三个问题是"图片导出后分辨率不够,或者标签显示不完整"。PNG导出时一定要在导出面板里设置足够高的resolution(建议600dpi以上),并且关闭"scale labels with image"选项,否则导出的图片里节点标签会糊成一片。如果最终要投稿,优先导出PDF,在Adobe Illustrator里打开再另存为TIFF或EPS格式,这是学术出版最保真的路径。

5.3 网络分析阶段容易忽略的细节

做Network Analyzer分析时,有一个小坑值得提醒:如果网络里存在孤立节点,Network Analyzer计算网络直径、平均最短路径等全局参数时,会把孤立节点当作无法连通的对象处理,导致全局指标异常或者计算时间过长。我的建议是:先用Filter把degree等于0的节点过滤掉,再跑Analyze Network,得到的全局拓扑参数才是有意义的。

另外,MCODE聚类结果的解读要谨慎。MCODE发现的每一个"模块"并不等于是真实的蛋白质复合物,它只是基于网络拓扑结构推断出的密集连接区域。我在文章里通常表述为"一个包含X个蛋白的紧密互作簇",而不是直接说"一个蛋白质复合物"。这种表述上的严谨性,审稿人是非常看重的。

还有一点经验分享:不管是在STRING还是在Cytoscape里做的分析,建议每一步都保留原始数据截图和参数记录,包括版本号、检索时间、阈值配置等等。这不仅是学术规范的要求,更能在返修时快速复现数据,省去重新跑一遍的麻烦。

5.4 一个快速上手的完整操作清单

整理一份我每次做PPI分析都会对照的操作清单,分享给大家参考:

  • 准备基因列表,统一为官方Symbol
  • 打开STRING,选择正确物种或Taxonomy ID
  • 粘贴基因列表,设置置信度阈值(推荐0.7)
  • 检查和调整网络类型(是否保留additional nodes)
  • 导出TSV格式的互作关系文件
  • 打开Cytoscape,导入TSV文件并确认节点列和边属性列
  • 执行yFiles Organic Layout优化布局
  • 用Network Analyzer计算拓扑参数并导出节点属性表
  • 按degree + betweenness筛选hub基因
  • 用MCODE识别功能模块并导出模块成员
  • 对模块基因做GO/KEGG富集分析
  • 调整样式映射(节点大小、颜色、边粗细)
  • 导出高分辨率图片(PNG或PDF)并保存session文件

这张清单我贴在实验室工位上很久了,每次新同学问我PPI网络怎么分析,我就直接拍张照发过去。照着走一遍,虽然中间会有各种各样的小问题,但方向不会错。

5.5 从PPI网络继续往下游延伸的思路

PPI网络构建只是生信分析的一个中间环节,后续的延展方向非常多。我常用的延伸路径至少有三个。第一个是把PPI网络和差异表达数据叠加——在Cytoscape里导入表达量数据,把上调基因标成红色、下调基因标成蓝色,这样网络图本身就带有表达变化的信息。第二个是结合ceRNA网络分析,把lncRNA-miRNA-mRNA的调控关系加入到PPI网络的上游,形成"转录调控 + 蛋白互作"的多层次调控网络。第三个是把hub基因列表提交到多数据库做联合验证,比如用GEPIA验证hub基因在肿瘤和正常组织中的表达差异、用cBioPortal看它的突变频率、用Kaplan-Meier Plotter做生存分析。这些下游分析能显著提升PPI网络结果的生物学意义和临床相关性。

每次做分析的时候我都会提醒自己,网络分析只是提供线索和假设的工具,真正的生物学结论必须要有实验验证支撑。STRING和Cytoscape的组合拳能帮你快速锁定关键蛋白,但蛋白到底在细胞里怎么发挥作用,还是得靠免疫共沉淀、敲低/过表达这些湿实验来回答。

最后再分享一个小技巧:Cytoscape的session文件(.cys)一定要勤保存。我见过好几次,辛辛苦苦调好布局和样式,结果软件闪退,一切回到解放前。每调整完一个阶段就Ctrl+S存档,这个习惯帮你省掉的不只是几十分钟的重做时间,还有重做时根本调不回原来那个"恰到好处"布局的崩溃心情。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询