
做蛋白相互作用分析绕不开两个工具STRING和Cytoscape。我在研究生阶段第一次接触PPI网络构建时被这两个工具折磨得不轻——STRING数据库的导出格式搞不清楚Cytoscape的样式映射一头雾水做出来的网络图丑得没法放进论文。后来帮同门处理了几次类似问题又陆陆续续在多个项目里复盘迭代才算把这条分析链路跑得又稳又快。这篇内容就是我从零开始跑通StringCytoScape构建PPI网络全流程的经验总结覆盖参数怎么调、格式怎么选、图怎么美化、网络怎么分析以及常见报错怎么解决。适合刚接触组学数据分析的研究生也适合需要批量处理多组PPI分析的科研老手照着操作就能复现出一张能投稿的PPI网络图。1. 构建PPI网络的思路拆解先搞清楚你要回答什么问题1.1 一个典型研究场景的还原先还原一个最常见的场景你通过转录组测序筛出了一批差异表达基因或者从GEO数据库下载了某个疾病的数据集做WGCNA拿到了核心基因列表。这时候审稿人或者导师大概率会问一句话这些基因之间有没有相互作用它们是不是聚集在某个功能模块里要回答这个问题就必须把基因层面的静态列表升级成蛋白质层面的动态互作网络。PPI网络蛋白质-蛋白质相互作用网络就是把每个蛋白质当作一个节点把蛋白质之间的物理结合或功能关联当作一条边最后构成一张网络图。这张图能帮你做三件事第一找出在网络中连接度极高的核心蛋白hub gene这类蛋白往往是疾病机制里的关键角色第二看你的候选基因群体内部是否紧密聚集如果它们明显抱团说明这些基因可能协同参与某条信号通路第三结合后续的富集分析把网络模块和通路串起来形成一条完整的分子机制证据链。我自己常用的分析路径是差异基因列表 → STRING构建PPI关系 → Cytoscape可视化和模块分析 → 筛选hub基因 → 回到原始数据验证表达量。这一套组合拳做下来既能在生信分析部分展示工作量又能为后续湿实验提供明确的方向。1.2 STRING和Cytoscape的分工逻辑很多初学者搞不清楚为什么偏偏是这两个工具搭配使用而不是一个工具搞定所有事情。这得从两者的定位差异说起。STRINGSearch 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.7high 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列对应的是node1Target 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 NetworkCytoscape会计算整个网络的节点数、边数、平均度、网络直径等指标。这里可以快速发现一个常见问题——如果网络中有大量孤立节点度数为0说明这部分基因在STRING里没有找到任何互作伙伴这在P0.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为DegreeMapping 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分析的重头戏之一。做法有很多但最常用的插件是MCODEMolecular Complex Detection。它的原理是基于节点连接的紧密程度来找密集连接的子图对应到生物学上往往就是蛋白质复合体或功能模块。安装方式Apps → App Manager搜索MCODE一键安装。装好后在Apps菜单里打开MCODE面板设置参数时我常用的参数是Degree Cutoff2Node Score Cutoff0.2K-Core2Max Depth100。这些参数的意思是参与聚类分析的节点度数至少为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一定要勤保存。我见过好几次辛辛苦苦调好布局和样式结果软件闪退一切回到解放前。每调整完一个阶段就CtrlS存档这个习惯帮你省掉的不只是几十分钟的重做时间还有重做时根本调不回原来那个恰到好处布局的崩溃心情。