一直做植物比较基因组和基因家族分析的朋友,应该都遇到过这种场面:从某个数据库里下载了一套“参考基因组”,跑完基因家族鉴定,结果里面多出几百个“没头没尾”的碎片基因模型;或者跨物种比较时,同一个物种换了两个数据源,基因数量就差出去三分之一,下游结论直接失真。这几年我整理植物基因组数据时,最常被问的问题就是“高质量植物基因组到底去哪找”。我的答案基本固定:先过一遍 Ensembl Plants。
Ensembl Plants 是 Ensembl 旗下的植物基因组分支,专门做已发表植物基因组的统一注释和展示。它和 NCBI 那种“仓库式”数据库最大的区别在于注释的规整度,尤其适合做跨物种比较、基因家族筛选、系统发育重建这类对注释一致性要求极高的任务。这篇就把我实际检索、筛选、下载、踩坑的完整流程写出来,送给准备做植物组学分析、以及不想被低质量注释坑掉三个月的你。
1. 跨物种比较为什么要首选 Ensembl Plants
很多人上手第一个基因组数据,习惯直接去 NCBI 搜索然后点下载。NCBI 确实全,但对植物基因组的处理逻辑是“收录优先于整理”:谁能提交基因组,谁就能附带自己的注释版本。结果就是同一套下游分析里,A 物种用 RefSeq 注释,B 物种用 Ensembl 注释,两者基因模型的构建标准和证据来源完全不同——最后统计出来的基因家族扩张收缩,很可能是注释系统的差异,而不是真实的生物学信号。
Ensembl Plants 走的是另一条路:它把已发表的基因组根据统一的注释流程重新跑一遍。这个流程会整合转录组证据、同源蛋白比对、可变剪切模型等,让每个物种的基因结构都被相同规则修剪过。换句话说,Ensembl Plants 不追求“收录最快”,而是追求“拉齐标准”。
1.1 Ensembl Plants 到底比 RefSeq 强在哪
拿我做过的水稻和玉米比较举例。从 NCBI RefSeq 下载的水稻注释,染色体编号有的是 Chr1,有的是 chr01,有的直接给 scaffold;而 Ensembl Plants 里,染色体命名统一,基因 ID 的 prefix 一致,GFF3 的格式也走同一套规范。看起来是小事,真正跑起 bedtools、samtools 的时候,这些不一致能让你多调一周的 bug。
注释可比性就更明显了。Ensembl Plants 的注释多经过“证据对齐”步骤:每个基因模型都要有转录本、蛋白同源位点或剪接证据支撑。这相当于所有物种都用了同一套质检标准,跨物种比较时自然更公平。
1.2 和 Phytozome、PLAZA 等植物数据库的分工差异
很多新手会问我:Phytozome 不也挺好吗?它确实好,但覆盖面主要偏向模式植物和特定作物家族,更新节奏也更慢。PLAZA 侧重基因家族与直系同源关系的注释,适合做精细的同源分析,但拿原始序列和泛基因组数据就没有 Ensembl Plants 方便。
我的分工习惯是:
| 数据库 | 强项 | 适合场景 | 注意点 |
|---|---|---|---|
| Ensembl Plants | 统一注释、FTP 数据全、版本规范 | 跨物种比较、基因家族、系统发育、变异分析 | 版本号独立于主 Ensembl,别弄混 |
| NCBI RefSeq | 收录全、更新快 | 单一物种快速取数据 | 注释来源杂,跨物种比较需慎用 |
| Phytozome | 植物比较基因组专业背书 | JGI 测序物种、精细基因结构 | 物种覆盖有限,更新周期长 |
| PLAZA | 直系同源分组专业 | 同源基因家族比较 | 原始数据偏二次整理,自由度低 |
所以我的结论是:如果你想做“一个物种仔细看看”,NCBI 没问题;如果你要做“多个物种横向比”,先去 Ensembl Plants。
2. 植物基因组高不高质,先看这四个硬指标
Ensembl Plants 收录的也不全是高质量基因组。它像个大超市,货架上有精品也有临期品。关键在于你自己学会看“配料表”。我在筛选时基本只看四个维度。
2.1 组装层级:从 Contig 到 Chromosome 的差距
点进一个物种的 Ensembl Plants 页面,先看 assembly description。如果组装水平停在 contig 或 scaffold,说明这份基因组还是碎片化状态,连染色体都没拼完整。这类数据做基因家族鉴定还行,做共线性、结构变异、着丝粒区域分析就会非常痛苦。
我一般这样分级:
- Chromosome-level:染色体级别组装,基因上下游顺排关系可靠,共线性分析可用。
- Scaffold-level:有部分排序和方向,但存在大量 gap,做基因间距、顺式元件分析要打折。
- Contig-level:碎成片段,只适合做基因内容统计,不适合做位置依赖的分析。
如果页面里写着 assembly unit 是 chromosomes,但没有注明染色体数量是否与核型对应,也要留个心眼。最好是常见核型数量,比如禾本科大多能对应到一个明确数字。对不上就查原始论文。
2.2 BUSCO 与注释完整性:比 N50 更值得关注
很多只看 N50 的人很容易被数值骗到。N50 只能说明组装连续了一半,但组装里有大量 gap 时,N50 依然可能虚高。我更看重三重验证:
第一,BUSCO 完整度。植物一般用viridiplantae_odb10库评估。完整率 95% 以上算优质;90% 到 95% 能接受;低于 90%,我做基因家族分析之前会犹豫。BUSCO 里的 fragmented 比例也很关键——如果超过 5%,说明组装/注释阶段把很多基因劈开了,下游会把一个基因商成三个假基因。
第二,注释基因数与近缘物种对比。比如某个属常见模式物种注释出 25000 个基因,你筛到的这个却只有 15000 个,大概率不是真实差异,而是注释丢失。想更严格可以查注释时用了多少转录组证据,如果完全没有 RNA-seq 支撑,基因结构预测的可信度自然有限。
第三,重复序列注释。Ensembl Plants 对 TE 区域注释得比较完整,一套高质量基因组通常需要标注一定比例的重复序列。如果 repeat 区域几乎为零,说明注释流程把大量序列问题掩盖了。
这三关过了,这个基因组才进得了我的候选清单。
3. 检索与筛选实操:从物种页面到候选清单
理论说完了,进入实际点鼠标环节。下面是我每次拿到新物种需求时的完整检索流程。
3.1 Ensembl Plants 页面里那些数字怎么读
进官网之后,直接搜索物种拉丁名。比如要番茄就搜Solanum lycopersicum,结果页通常会列出多个 assembly 版本。重点看几个字段:
- Assembly:默认版本名,比如 SL4.0、TAIR10、IRGSP-1.0。
- Gene build:注释版本,这行信息特别容易被忽略。同一个 assembly 可以有多个 annotation 版本,老版本注释重建得不好,基因数可能少一截。
- Base count / Golden path length:基因组总长,和 k-mer 估算出的基因组大小比对一下,明显偏小说明组装不完整。
- Gene count:基因模型数,和同属已发表数据横向对比。
- BUSCO 报告:新版 Ensembl Plants 部分物种会直接展示 BUSCO 评分,没有的话就自己去官网下序列重跑。
如果页面右上方显示 "Genome assembly: SL4.0",旁边可能还有日子。这不代表论文发表时间,只代表这个 assembly 被 Ensembl 收录的时间。
3.2 我的筛选用例:一份“够用”的基因组清单长什么样
假设我要做禾本科六个物种的基因家族扩张收缩分析。我不会只因为某物种是“明星物种”就用手头现成的版本,我会建一个表,逐项打分:
| 物种 | Assembly | Gene count | BUSCO | 转录组证据 | 结论 |
|---|---|---|---|---|---|
| 水稻 | IRGSP-1.0 | ~36000 | 98% | 充分 | 入选 |
| 玉米 | B73 RefGen_v4 | ~39000 | 96% | 充分 | 入选 |
| 高粱 | Sorghum_bicolor_NCBIv3 | ~34000 | 94% | 一般 | 候选 |
| 二穗短柄草 | BrachyDist_v2 | ~25000 | 92% | 一般 | 候选 |
| 某野生近缘种 | Scaffold级 | ~22000 | 85% | 少 | 谨慎 |
这个环节筛掉一批“参考”但注释粗糙的版本。刚开始我嫌麻烦,后来发现这一步省下的时间,远大于后面清洗数据浪费的时间。
提示:筛选时不要只看总分,也不要用同一个 gene count 阈值卡所有物种。不同谱系之间真实基因数差异很大,重点是看它和同谱系高质量物种的差距有多大。
4. 数据下载:别只盯着 Download 按钮
页面上的下载按钮适合拿单基因序列,但做批量和全基因组分析,必须走 FTP。Ensembl Plants 的 FTP 结构其实非常规律,建议直接记路径模式。
4.1 FTP 目录结构速查
Ensembl Plants 的根路径是ftp.ensemblgenomes.org/pub/plants/release-XX。注意这个 release 编号,它属于 Ensembl Genomes 的独立发布周期,和执行中的主 Ensembl release 编号不是一回事。比如主 Ensembl 跑了 110 期,这边可能是 60 期,不要反而满世界找“release-110/plants”。
下面是我最常用的三段路径:
- DNA 序列:
http://ftp.ensemblgenomes.org/pub/plants/release-XX/fasta/species_name/dna/- 蛋白序列:
http://ftp.ensemblgenomes.org/pub/plants/release-XX/fasta/species_name/pep/- 注释文件:
http://ftp.ensemblgenomes.org/pub/plants/release-XX/gff3/species_name/物种名这里要用“属名小写+种加词小写”,中间一个下划线,比如solanum_lycopersicum。
4.2 序列与注释文件怎么配对
GFF3 目录下通常有多个版本文件,命名里带有 assembly 版本号,像Solanum_lycopersicum.SL4.0.xx.gff3.gz。下载前一定要确认它对应的 assembly 和你要的 DNA 文件一致。最稳的做法是,从 FTP 的 species 主页读取 README 或 文档中的对应表。
如果你同时下载了 GTF 和 GFF3,注意两者基因模型计数有时对不上。原因是 GTF 通常只包含 mRNA 和 CDS 层级,而 GFF3 可能包含更多基因区域特征。做基因结构分析我用 GFF3;做转录本定量或把他人的 RNA-seq 管道直接套过来时,我可以从 GTF 转成 SAF 格式更省事。
还有一个小技巧:做比较基因组时,去下载dna/目录下以toplevel结尾的 FASTA——它包含所有 scaffold 和 chromosome 序列,是大多数比对工具的标准输入。而那些sm.fa或softmasked.fa,视分析目的选用;重复序列比较多时要留意 softmasked 版本对短读比对的影响。
4.3 从 Ensembl Plants 官网反查 NCBI GCA 编号
有时候我在 Ensembl Plants 下好了数据,但论文方法部分要求注明对应的 GenBank 版本。这时候怎么反查?
进入物种的 "Genome assembly" 页面,找到 “Assembly accession” 或 “Source database”。通常 Ensembl 会在 assembly 描述里写明对应的 GCA 编号,比如某个小麦版本对应 GCA_900235115 之类的。如果页面没直接给出,就下它的 assembly report 文件,文件里会列出 raw sequence 的 GenBank accession。
这个反查过程特别重要,因为很多期刊审稿人会要求原始终止序列编号。别等我到投稿那一步才发现版本对不上,提前把 GCA 编号记在你的 README 里,能救论文于水火。
5. 不同分析任务对应不同“够用”标准
很多人把“高质量基因组”当成一个固定标签,其实不是。对某一类分析来说足够“高质”的数据,换一个分析可能就明显不够用了。我按任务类型总结过一套选版本心得。
5.1 做基因家族扩张收缩,怎么选版本
这类任务最怕“注释尺度不统一”。如果你五个物种里三个来自 Ensembl Plants,两个来自 NCBI,最后统计基因家族大小差异时,很大一部分差异会是注释粒度造成的。比如一个基因被预测成 3 个碎片基因模型,基因计数立刻被抬高。
所以做基因家族分析,我最推荐“全 Enssembl Plants”组队,至少在注释流程上是同一套工厂出来的。如果某个物种 Ensembl Plants 没有高质量版本,再考虑用同门近缘物种代替,而不是硬塞一个低质量版本。
基因家族鉴定时还要记得合并同源基因:先用gffread从 GFF3 提取基因区和 CDS,把同一 locus 的转录本合并成一个基因的蛋白代表,避免可变剪切造成假家族成员膨胀。
5.2 做变异位点或群体研究,取舍逻辑完全不同
群体研究看重的是可靠的 SNP/Indel calling,而变异检测严重依赖“坐标序列的稳定性”。这时候我优先保证两点:一是参考基因组本身尽量少 gap,二是注释版本尽量和已发表的群体文章一致。很多作物物种,某个课题组做群体的参考版本和你选的版本不同,下游比对结果就会错位。
如果你的研究关注非编码区域、增强子、启动子,那 assembly 版本的 gap 分布比 gene count 重要得多。一个 N50 高但 gap 都挤在启动子区域的版本,会直接消灭掉一大批 cis 调控变异。
反过来,如果只做编码区的变异,那组装连续度可以适当让步,但注释的 CDS 完整性必须优先。同一个物种的.pep文件里蛋白数量是不是和 GFF3 里的 mRNA 数量对得上,这一步就能过滤掉一堆注释 bug。
核心原则:别问“哪个数据最好”,先问“我接下来想推什么结论,什么标准才不会推翻我自己”。
6. 我在这套流程里踩过的几个坑
数据下载并不是流程的结束,真正的工作从文件落地后才开始。这里写几个我实际遇到、且很多人都会碰到的坑,当作排查清单。
6.1 注释文件里 mRNA 数量远小于基因数量
第一次下载烟草的 GFF3 时,我看到 gene 数量是 38000,但 mRNA 只有 27000,心里咯噔一下。一查发现,问题出在部分 gene 特征下没有完整的 mRNA 子特征,只有gene和pseudogene层级。如果直接用gffread提取转录本,那一万多个基因会被无声丢掉。
排查方法很简单:用grep -c $'\\tmRNA\\t'数一下 mRNA 行,再用awk '{print $3}' | sort | uniq -c看各类特征是否齐全。如果发现大量 gene 没有 mRNA 子行,优先考虑换注释版本,而不是自己修。
6.2 官网版本和 NCBI 版本对不上
某次我下载了一个豆科物种,Ensembl Plants 里面写着与某个 GCA 对应。做完正反比对,发现 Ensembl 用的序列其实是该 GCA 的后续修订版。我心里一紧,说明这批数据的染色体编号命名和 NCBI 里的原始序列对不上,导致我后续的 VEP 注释报了一大堆 mismatch。
后来我养成了一个习惯:下载数据后在本地用samtools-faidx对指定染色体区域剪一段序列,再到 NCBI 对应版本里用 BLAST 验证,确认完全一致再往下走。多花十分钟,省掉投稿前的崩溃。
6.3 转座子区域里的“假基因”混进基因家族
Ensembl Plants 的注释相对规整,但依然会保留一部分“残缺基因模型”。尤其是在转座子富集区,很多基因模型本身是表达宿主转录本或退化基因片段。做基因家族的时候,这些序列容易比对到同一家族里,然后被当成“新成员”。
我的做法是做一轮证据过滤:保留那些具有明确 InterPro 结构域、或至少匹配到同源蛋白数据库的基因模型。操作上用gffread转蛋白序列后,通过InterProScan批量注释,再设置一个结构域筛选阈值,把伪基因比例压到最低。
6.4 蛋白序列里带终止符,BLAST 结果变碎片
还有一次,我从 Ensembl Plants 下载的.pep文件里部分序列带着内部终止密码子*。我直接拿去做 BLAST,结果把一条蛋白拆成两段来算,导致一段保守结构域被切成两半,家族归属直接错误。
这里提醒所有程序化处理的人:拿到.pep文件后,先扫描内部 stop codon;有的话按标准流程把这类序列标记为“蛋白预测异常”,要么剔除,要么拆分后重新做结构域预测。别偷懒,这个检查三分钟就能做完。
7. 实操里的小建议
最后再从重复多次的参数选择上说点个人体会。跑BUSCO,植物基因组我最常用viridiplantae_odb10,命令大致是:
busco -i genome.fa -l viridiplantae_odb10 -o busco_out -m genome -c 16如果你的物种特别冷门,viridiplantae库可能有点偏大,可以改用embryophyta或其他植物亚库,但后续写文章一定要注明用的哪个库,否则别人没法复现你的评分。
注释质量自检,我习惯跑一遍agat的agat_sp_statistics,它可以同时输出 CDS 长度分布、外显子数量分布、基因密度、起始/终止密码子比例。真正高质量物种注释的外显子数量分布会比较均衡;如果看到外显子数量几乎全为 1——也就是单外显子基因占比异常高——说明注释流程大概率漏掉了大量剪接事件。
最后给一句实在建议:注册一个 Ensembl Plants 账号,把常用的物种版本加进“收藏”,查看新物种时也会推送相关 release 更新。每次发布新版本前用旧的跑一遍流程,新版本出来再备份旧版,这个习惯能帮你避免很多半年后“数据更新导致结论无法复现”的麻烦。
我自己做植物比较基因组这几年,筛选数据的时间早就超过了实际分析的时间。刚开始觉得很浪费,后来才明白,好的数据筛选不是浪费时间,而是把“数据分析里 80% 的时间花在洗数据上”这个局面往前挪了一步。把基础打牢,后面每一步都会快很多。