做植物基因组和基因家族研究的朋友应该都有体会鉴定出一个基因家族的全部成员只是第一步接下来老板和审稿人通常会追一句——“这个基因家族在不同物种里是怎么演化的哪里来的有没有经历过复制事件”要回答这类问题共线性分析几乎是必做的也是全基因组层面最直观的证据之一。而TBtools这个在国内生信圈几乎人手一个的图形化工具套件把MCScanX命令行那一堆繁琐步骤打包成了几个按钮真正让我这种不爱敲命令的人也能在几分钟内跑完一次物种间共线性分析。这篇文章不是什么高深的理论科普就是我自己平时跑共线性分析的一份完整记录包含数据准备、参数选择、结果解读和一堆踩过的坑。无论你是刚接触TBtools的新手还是已经会跑一步MCScanX但被圈图配色逼疯的老手应该都能从这里拿到一些直接能用的东西。1. 共线性分析是什么为什么基因家族研究离不开它1.1 物种间共线性的生物学含义“共线性synteny/collinearity”这个词直白一点说就是两个基因组在染色体局部区域上基因的种类、顺序和方向保持着某种程度的一致。这种一致性不是随机的它往往意味着这两个区域来源于同一个祖先片段在物种分化之后没有发生大规模重排。常见的说法有两种层次宏观上叫“同线性”指共线区块里的基因顺序一致微观上很多文章直接叫“共线性”指检测到的共线性区块syntenic block中的成对基因。做基因家族分析时我们一般关注的是微观层面的共线性基因对也就是在共线性区块内一一对应的同源基因对。为什么它会存在最主要的原因是物种形成过程中染色体层面的重组、断裂和重排是相对缓慢的。相比单个基因的序列突变大片段顺序的改变需要更长的时间尺度。所以亲缘关系越近的物种共线性信号越强亲缘关系远了即使有同源基因基因顺序也可能被打乱检测不到明显的共线性区块。另一个重要来源是全基因组复制事件WGD和片段重复。很多植物在进化历史上经历过一次甚至多次全基因组加倍结果就是基因组里同时存在多套拷贝的染色体片段这些拷贝之间也会检测出共线性。所以物种内做共线性same-species synteny很多时候就是在找WGD和片段重复的痕迹。1.2 共线性分析能回答什么问题对基因家族研究来说共线性分析主要能回答几个问题判定直系同源和旁系同源。两个物种里都有某个基因家族成员它们到底是不是直系同源只看序列相似性不够可靠如果它们所在的染色体区域还存在一大段共线性证据就更硬了。揭示基因家族的扩张机制。一个基因家族从A物种的2个成员变成B物种的6个成员多出来的4个是怎么来的通过全基因组或片段重复还是串联重复共线性分析能区分这两种情况。辅助估计关键事件的时间。结合Ks值可以估算复制事件发生的大致时间。评估物种间染色体结构的保守性。这通常用于更大尺度的比较基因组学但基因家族分析里也会拿来做背景支撑。说白了共线性分析就是给基因家族进化故事提供“位置证据”。序列系统发育树告诉你哪些基因是姐妹关系共线性告诉你这些基因在染色体层面是否保留了祖先顺序两者对照起来结论才有说服力。1.3 从MCScanX到TBtools为什么我推荐图形化没有TBtools的时候跑共线性分析要么用DAGchainer要么用MCScanX。MCScanX本身是命令行工具要先自己跑BLASTP再转换BLAST输出格式再运行MCScanX最后还要写脚本解析结果。这些步骤本身不难但很容易在“格式转换”这一步浪费一整天BLAST输出列顺序不对、基因ID带横线、染色体命名不统一……每个问题都能折腾半天。TBtools把这一整个流程封装成了“One Step MCScanX”内部自动完成BLASTP、格式转换和MCScanX运行输出结果还会帮你把关键文件整理好。更难得的是它后续的可视化同样在一个界面里完成从点阵图到圈图全部覆盖。对大部分只想拿到结果发文章的人来说这就够了。当然如果你有批量化分析需求或者想跑自定义参数的重型比较后面还是逃不掉要学一下MCScanX命令行但那是另一回事。2. 分析前准备文件、参数和常见坑2.1 需要准备哪些文件物种间共线性分析需要的最基本输入是两个物种的基因组注释文件GFF3/GTF和蛋白序列文件FASTA/PEP通俗点说一份文件告诉软件“基因组上每个基因在哪个位置”另一份文件告诉软件“每个基因的蛋白序列长什么样”。GFF注释文件里需要包含gene以及mRNA/CDS层级的信息因为MCScanX在工作时需要通过GFF把基因定位到染色体上。比较常见的问题是有些版本只有mRNA行没有gene行或者gene ID与fasta文件里的ID不一致这些都要提前处理。蛋白序列文件可以直接从基因组注释流程中提取也可以从Phytozome、Ensembl Plants、NCBI RefSeq等数据库下载。需要注意fasta头部的ID必须和GFF3第九列的ID对应上。如果是从Phytozome下载的通常ID是“gene:xxx”这种格式可能要去掉前缀让它变成干净的唯一ID。很多时候还需要染色体大小文件用于画图。TBtools里可以用GFF来联动生成也可以自己根据基因组fasta统计。这个文件本身不是One Step MCScanX的必需输入但后面画双物种图或圈图时经常会用到。2.2 数据清洗和格式预处理我先说一个原则宁可多花10分钟检查数据也不要花1小时跑完后发现结果全是错的。共线性分析对输入格式极其敏感尤其是ID。结合我自己的经验建议重点检查这几个地方染色体命名统一。同一个物种内部GFF里用“chr1”fasta里用“1”那MCScanX可能直接报错或结果很少。多物种间还要注意区分ID比如拟南芥用At前缀、水稻用Os前缀这样结果文件里能一眼看出每个基因属于哪个物种。去除冗余转录本。如果一个基因有多个转录本只保留一个主要转录本primary transcript不然BLAST会比到好几个可变剪切体导致共线性区域里的基因对应关系混乱。检查蛋白序列是否有终止密码子和非法字符。蛋白序列应该只包含20种标准氨基酸字母如果有“*”或者“X”很多最好处理一下。很多从草稿基因组注释里直接提取的蛋白序列会带这类问题。检查ID是否有空格、引号、逗号。fasta header建议只保留第一个空格前的ID后面的描述信息删掉。有一个很典型的坑从某些数据库下载的文件ID后面跟了一段很长的描述TBtools解析时会因为空格截断导致ID对不上。2.3 TBtools安装与环境TBtools依赖Java环境。建议大家直接装Java 8或11老版本兼容性最好新版本TBtools-II对Java 11/17也都支持。安装后双击启动如果启动失败大概率是Java环境变量的问题。国内下载可以关注官方公众号“TBtools”或GitHub仓库。内存方面我建议做两个中等大小植物基因组比如基因组大小1GB以内的共线性分析时电脑内存至少8GB16GB会更舒服。如果要对多个大基因组比如小麦这种17GB的十倍体基因组做比较建议直接上服务器。曾经有一次我用8GB内存的笔记本跑小麦和玉米的共线性结果跑到一半直接OOM整个分析白等了半小时从那以后我就养成了跑大任务前先看内存的习惯。3. 手把手实操用One Step MCScanX完成物种间共线性分析3.1 合并多物种输入文件TBtools的One Step MCScanX支持两种输入方式方式A在界面里分别添加多个GFF文件和多个蛋白fasta文件TBtools会在内部自动合并。这种方式适合文件数量少、ID都比较规范的情况。方式B自己把所有物种的GFF合并成一个把所有物种的蛋白序列合并成一个fasta。我平时更习惯自己先合并因为这样能顺便检查一下ID。合并时注意不同物种的基因ID不要相同。比如拟南芥基因At1g12345和水稻基因LOC_Os01g12345如果只保留数字“1g12345”就会冲突。合并命令很简单bash下直接操作cat Arabidopsis.pep.fa Oryza_sativa.pep.fa combined.pep.faGFF文件合并要注意把表头信息去掉只保留真正的注释行不然TBtools解析时会因为多行“#”而停下来。更稳妥的方式是grep -v ^# Arabidopsis.gff3 Arabidopsis_clean.gff3 grep -v ^# Oryza_sativa.gff3 Oryza_sativa_clean.gff3 cat Arabidopsis_clean.gff3 Oryza_sativa_clean.gff3 combined.gff33.2 One Step MCScanX界面参数逐项说明打开TBtools-II在菜单栏找到“Genomics” - “Synteny” - “One Step MCScanX”。界面会要求你选GFF文件、蛋白fasta文件还有几个参考参数。这里我把每个参数都说明清楚免得大家对着全英文界面发怵。参数名默认值作用我的建议E-value1e-5BLASTP的显著性阈值近缘物种可设1e-10远缘物种可放宽到1e-3或1e-2Num of BLAST Hits5每个query保留的最多BLAST hit数量基因家族大或远缘比较时可调到10Match Score50判断两个基因对能否形成共线性片段的打分阈值分数越高越严格一般50够用Match Size5一个共线性区块中最少包含的基因对数量做古老事件用3做保守区块用10Gap Penalty-1空位罚分一般不需要动参数选择其实没有绝对标准跟你研究的物种进化距离和分析目的有关。我个人的建议是先按默认参数跑一遍看看整体结果数量是否合理。如果共线性对太少再逐步放宽E-value到1e-5甚至1e-4和降低Match Score如果结果多得离谱、圈图上密密麻麻那再收紧Match Size和Match Score。3.3 运行与结果文件解读点击Start之后如果数据量不大比如两个1G左右基因组一般几分钟到十几分钟就能跑完。TBtools会弹出输出目录里面会有几个关键文件一个中间BLAST文件比如名为“xxx.blast”记录所有BLASTP比对结果。一个用于MCScanX的GFF文件TBtools会自己整理成MCScanX能识别的格式。一个.collinearity文件这是核心结果所有共线性区块都记录在里面。打开.collinearity文件你会看到类似这样的结构化文本先是每个区块的标题行比如“Alignment 0: scorexxx e_value...”然后跟若干行每行包含染色体、基因ID、基因位置、链方向等信息。同一个区块里的两组基因是平行对应的同源基因对。我一般不会直接在记事本里盯它看而是把.collinearity文件导入Excel或者用TBtools的提取功能来处理提取出所有共线性基因对再和我的基因家族列表做交集。这步具体怎么做放到第4节详细讲。3.4 双物种共线性图Dual Systeny Plot有了.collinearity和两个物种的GFF文件就能画一张最经典的双物种共线性连线图。在TBtools菜单里找到“Genomics” - “Synteny” - “Dual Systeny Plot”部分版本写的是“Dual Systeny Plot for One-to-One”之类意思一样。界面会让你依次选择两个物种的GFF文件和上一步生成的.collinearity文件然后点击Start。稍等片刻会出现一张两个物种的染色体横向排列、中间有彩色连线连接的图。这张图能直观地展示两个基因组之间的大片段对应关系。如果两个物种有大量连锁区段就会看到很多平行或交叉的连线。颜色通常是每对染色体的连线颜色可调。如果觉得连线太密可以在参数里调整只显示排名靠前的区块或降低透明度如果觉得线条太细看不清可以调整线宽。4. 进阶圈图、基因家族共线性对提取与美化4.1 用Advanced Circos画全基因组圈图如果你需要展示多个物种或者让结果更好看圈图是很多文章的标配。TBtools里的Advanced Circos在“Genomics” - “Circos” - “Advanced Circos”下它做圈图不需要你手动去写circos的配置文件而是通过加载几个表格文件来组装。一般需要准备三类信息品种/染色体的长度信息与颜色。每个染色体上基因的密度信息可选比如画基因密度热力图。共线性区块或共线性对信息通常直接选MCScanX生成的.collinearity文件或者你提前整理好的共线性对列表。实操时你可以先用“Create Circos Configuration”之类的快捷按钮生成一个初始配置图再手动调整里面的文件路径和颜色。这里有一个我踩过的坑如果配置文件里用了绝对路径换电脑打开或者把工程目录改了会导致读取不到文件。所以建议把配置文件和输入文件放在同一个目录里。4.2 从全基因组结果中提取基因家族的共线性对假设你的基因家族成员列表里有200个基因现在要看它们分别与另一个物种哪些基因形成了共线性对或者说要提取出这200个基因在物种内共线性、物种间共线性中的所有对应关系。思路其实很简单把.collinearity文件解析成两行一组的共线性基因对列表然后和你的成员列表做交集。具体操作先把.collinearity文件导入Excel按“Alignment号”分组把每个区块里的两个基因列之间一一对应起来。整理出一个两列的对应表物种A基因ID、物种B基因ID。把物种A和物种B的基因家族成员分别整理成两列然后用VLOOKUP或者筛选功能匹配出那些“A成员与B成员出现在同一行”的记录。统计去重后的共线性基因对数量和涉及的基因数。如果嫌Excel麻烦TBtools里也有“Synteny”相关的小工具可以直接提取共线性基因对还可以和基因注释信息合并。实在要写脚本的话Python里用pandas处理也就十行左右的事。4.3 判断串联重复与片段重复做基因家族扩张机制分析时拿到成员列表后通常要分成几类串联重复、片段/全基因组重复、分散重复。共线性分析在这里的主要作用是判断片段重复。判断标准以植物基因家族文章为例串联重复tandem两个基因在同一染色体上相邻间距小于一定阈值常见标准是间隔不超过10个基因或物理距离在100kb以内不同文章标准略有差异。片段重复segmental/WGD两个基因位于检测到的共线性区块里即它们本身在.collinearity结果里成对出现。分散重复dispersed不属于以上两者。在TBtools里你可以用MCScanX结果直接筛选片段重复候选。筛选时要注意一个基因可能同时落在多个共线性区块里会有冗余需要按“基因对”去重。另外同一物种自己跟自己比得到的结果用来鉴定物种内的片段重复。4.4 文章级别的展示技巧图做出来之后想让它从“能用”变成“好看且规范”我有几个小习惯配色尽量用同一色系的不同深浅避免红绿这种色盲不友好的组合。字体系用比较统一的无衬线体导出时注意文字大小是实际发表尺寸的2-3倍缩小后依然清晰。导出格式选PDF或SVG插入论文时再转TIF不要直接截图否则300dpi都不够。圈图里共线性连线的透明度调到50%-70%这样即使叠了很多线整体看起来也清爽。记得在图注里写明筛选参数比如E-value、Match Size审稿人很吃这一套。5. 常见问题与排查技巧实录5.1 比对结果接近空如果你跑完One Step MCScanX发现.collinearity里几乎没有区块先别急着怀疑软件。优先检查两件事一是BLAST有没有正常运行。打开生成的.blast文件看里面到底有没有比对记录。如果.blast就是空的说明两个物种蛋白序列相似性太低或E-value设得太严。二是GFF和蛋白ID是否对应。MCScanX是靠GFF定位基因位置的如果蛋白fasta里的ID在GFF里根本找不到那即使有BLAST结果最后也整合不出共线性区块。排查路径先用一个已知高度保守的基因比如Actin去两个物种蛋白库里做一次BLASTP。如果连这个都匹配不到数据肯定有问题。5.2 GFF和蛋白序列ID不一致这是新手最常见的问题。比如GFF里的gene ID叫“gene:AT1G01010”但蛋白fasta里叫“AT1G01010.1”。MCScanX按ID合并两个文件时就会失配。解决思路是统一ID。一般我建议把fasta的ID改成和GFF的gene ID一致也就是去掉可变剪接后缀“.1”或者把GFF里的前缀“gene:”去掉。TBtools里可以用GFFtools下设的ID修复工具也可以在Excel里批量替换。改完之后重新跑一遍问题通常就消失了。5.3 大基因组运行慢或内存不足如果两个物种基因组都很大比如每个超过2.5Gb或者做了多物种跨物种比较One Step MCScanX可能跑很久甚至卡死。这时候建议关闭其他大型程序给Java留足堆内存。把运行时间预算放宽大基因组跑几个小时是正常的。改用服务器或工作站。也可以先按染色体拆分只比对目标区域但这需要更多手动处理。另外TBtools在某些Windows系统上运行时如果系统休眠或锁屏可能会中断分析。跑大任务前先禁用电源休眠实测能省不少麻烦。5.4 圈图乱成一团圈图连线如果像一团毛线多半是筛选条件放太松了。解决办法只显示E-value小于某个更严格值的共线性对。只显示支持基因对数量较多的区块比如Match Size10。在Advanced Circos里调整连线的阈值或者只显示部分染色体的共线性关系。如果还是太密可以考虑用Dual Systeny Plot展示两个物种而不是把所有物种塞进一张圈图。5.5 参数选择的个人建议最后说一点个人经验。E-value用默认1e-5Match Score用默认50Match Size用3-10这是绝大多数文章的通行做法但千万别照抄完就不管了。每换一个物种对、每换一次基因家族的筛选范围我都建议先跑一个很小的测试集比如只提取部分染色体验证参数合理性再全基因组跑。这样既省时间也能提前发现输入文件里的隐藏问题。我这几年跑过不少物种对的共线性分析从拟南芥和水稻这种亲缘关系适中的到小麦和大麦这种大基因组再到一些基因组组装质量参差不齐的非模式物种。最大的体会是共线性分析技术本身并不难难的是把输入数据整理干净以及深刻理解输出结果背后的生物学意义。TBtools真正厉害的地方是把门槛降下来了但数据质量意识、参数意识、结果解读意识是任何图形化工具都替代不了的。如果这篇文章能帮你少踩几个坑那就不白写。下一次如果遇到物种内共线性、多倍化事件检测或者想把共线性分析结果和基因家族的表达量数据联动起来看我再来接着分享。