
如果你做过植物基因家族分析大概率经历过这种场景老板丢给你一张别人文章里的Circos图让你“照着画一张”而你翻遍全网教程发现要么是原生Circos的命令行参数看到眼瞎要么是R脚本运行到一半就报错。我第一次被要求画Circos图时硬着头皮用原生Circos折腾了一个多星期最后还是借TBtools几分钟出了第一版。这篇攻略就聊聊我后来怎么用TBtools把Circos图从“能出图”做到“能投稿”重点放在数据准备、界面操作、美化输出和踩坑排查上适合刚接触基因家族分析、需要快速出图但不想陷进命令行泥潭的朋友。1. 为什么我最终选择了TBtools的Circos模块1.1 从一次被命令行折磨的经历说起很多教程会用原生Circos来画圆形图这套工具本身很强能画卫星图级别的复杂图形但代价是你得先明白那套config文件体系karyotype、ideogram、ticks、links、plots角色之间靠include嵌套一个配色写错整张图就是满盘报错。当时我拿到的是水稻基因家族分析结果想展示基因密度、共线性关系和Ka/Ks值按教程写配置文件本地始终报“conf file missing or error”前前后后改到崩溃。后来实验室师兄说“你用TBtools画啊”我半信半疑打开TBtools发现Circos相关的功能直接在图形界面里点选就能出图。我并不是说命令行工具不好而是对大多数做基因家族分析的人来说我们需要的是一个能快速把数据变成图形的工具而不是先学会一门配置文件语法。TBtools最大的价值就在这里把原生Circos的复杂参数封装成面板把数据准备中的格式问题用可视化方式暴露出来尤其适合从GFF文件和基因家族成员列表直接出发的常规分析。1.2 TBtools Circos相比原生Circos与R circlize的真实差异很多同学会问既然有原生Circos还有R包circlize为什么还要用TBtools我把三套方案放在一起对比过感受如下对比维度原生CircosR circlizeTBtools Circos上手门槛高需要写配置语法中需要写R脚本低图形界面点选灵活度极高高中等适合常规图可复现性配置即文档易复现代码即文档易复现参数保存在GUI中需自己记录适合场景复杂定制、大规模基因组展示需要与R分析流程整合时快速出图、湿实验用户、教学演示输出质量高适合发表级高可细调较高配合AI后期微调可达发表级我用下来最大的感受是如果你只需要一张“基因家族成员在染色体上分布 共线性关系 外圈注释”的常规图TBtools是效率最高的选择。如果后续要画很特殊的布局比如多层重叠、不规则区间加亮再考虑用circlize或者原生Circos做二次加工。工具没有谁绝对更好关键看你的时间成本和需求边界。2. 画图前的数据准备搞懂输入文件格式是第一步2.1 三大基础文件与常见格式详解TBtools的Circos模块虽然免去了写配置文件的痛苦但“数据格式”这道门槛还是绕不过去。我收到过不少求助看了半天截图发现问题根本不是出在绘图步骤而是输入的文本文件列顺序不对。以常见的Circos绘图需求为例至少需要三类基础文件。第一类是染色体信息文件用来告诉程序共有几条染色体、每条染色体多长、显示成什么颜色。最常见的是两列Tab分隔文本第一列是染色体ID第二列是长度。如果你想让某一对染色体在图中高亮可以在后面追加颜色列例如Chr1 43270923 #2E86C1。第二类是基因位置文件每一行代表一个基因或一个标记在染色体上的位置。常规格式至少四列染色体ID、基因ID、起始位置、终止位置。TBtools的一些版本还允许第五列写正负链方便你后续用箭头或颜色区分正负链基因。需要注意位置坐标必须是整数而且起始小于终止。第三类是关系连接文件也可以叫link文件每一行代表一条连线连接两个基因或两个区块。最简单的两列格式就是两个基因ID例如Os01g0100100 Os02g0123400 Os01g0100200 Os03g0456700如果你想控制连线颜色和粗细可以追加列常见做法是第三列写颜色第四列写宽度。TBtools的不同子版本对这个文件的支持有些差异所以我建议先跑一个两列的简单例子确认能出线之后再考虑加颜色。除了这三类Circos图还可以叠加密度环、表达量热图环、Ka/Ks柱状图环等。在TBtools中这类附加数据通常也是独立文件需要你提前按染色体和坐标排序好。附加数据不是必须的第一次上手不要贪多先把基础三文件跑通。2.2 从基因家族分析结果中整理输入文件的实操示例假设你手里已经有一份基因家族分析结果最常见的三大件是基因组注释GFF/GTF文件、基因家族成员ID列表、MCScanX或类似工具的共线性结果。我现在以植物基因家族分析中最常见的任务为例演示怎么把原始数据整理成TBtools需要的输入文件。第一步提取染色体长度。GFF文件里通常会有#sequence-region或##sequence-region注释行或者你可以直接读取每条染色体上最后一个基因的末端坐标作为近似长度。用一条简单的命令就能完成awk -F \t $3gene {if($1!chr){print $1, max; chr$1; max$5} if($5max) max$5} END {print $1, max} genome.gff | tail -n 2 chromosome_length.txt不过这种写法不算严谨推荐优先使用seqkit或samtools faidx从基因组FASTA文件生成.fai文件第二列就是每条染色体的准确长度。得到之后整理成两列Tab分隔文件即可。第二步从GFF中提取基因家族成员的位置。通常你会有一个成员ID列表family_members.txt一行一个基因ID。用awk或grep从GFF里过滤出gene行再根据ID匹配输出染色体ID、基因ID、起始、终止四列。如果GFF的第九列基因ID带了;尾缀先做一下清理awk -F \t $3gene {print $1, $9, $4, $5} genome.gff | sed s/;.*//g all_genes.bed awk NRFNR{id[$1]1; next} {if(id[$2]) print $1,$2,$3,$4} family_members.txt all_genes.bed family_position.txt第三步把MCScanX输出的collinearity文件转换成link文件。MCScanX的.collinearity文件格式比较冗长核心关系在两个基因ID之间。用脚本提取出所有共线性基因对然后跟你的基因家族成员列表取交集只保留“两个成员都在家族里”或者“一个成员在家族里、另一个是共线性伙伴”的连线。这一步会让你的Circos图不显得乱也更有生物学意义。整个流程走下来你会发现TBtools其实不负责“分析”它只负责“可视化”。前期的数据清洗和格式化永远是出图效果好坏的分水岭。我见过很多人在这一步偷懒结果画出来的图要么有悬浮线要么基因分布明显错误最后还得回过头来重新整理数据。2.3 格式检查小技巧格式问题经常出现在肉眼看不到的地方。最容易出问题的几个点包括文件最后一行没有换行符、Tab和空格混用、基因ID中存在肉眼难分辨的O0和Ol、染色体ID的大小写不一致。我建议养成一个习惯在把文件交给TBtools之前先用less -S或Excel“分列”功能快速查看分隔符是否统一。如果你是Linux环境一条命令可以检查文件列数是否一致awk -F \t {print NF} chromosome_length.txt | sort | uniq -c如果输出中出现多种列数说明某些行格式有问题。另一个很实用的小技巧是用sort和uniq -d检查link文件里的基因对是否有重复cut -f1,2 link.txt | sort | uniq -d重复连线会在Circos图上产生重叠线条虽然不影响统计但会让图片看起来脏兮兮的。提前去重能省掉很多后期修图时间。3. 一步一图TBtools Circos绘图界面操作详解3.1 启动与加载数据界面路径与输入框对应关系打开TBtools后Circos模块通常在Graphics菜单下具体路径是Graphics - Circos - Circos Plot。不同版本菜单名称可能略有差异但大方向是一致的。启动后你会看到一个集中式参数面板左侧或上方有多个文件输入框右侧通常会有一个“Start”或“Run”按钮。第一次打开这个面板时别急着点Start先把每个输入框对应关系搞清楚。常规情况下面板会要求你依次加载染色体信息文件、基因位置文件、关系连接文件以及可选的其他数据环文件。我的习惯是只先加载最基础的三个文件其他留空跑通后再添加附件这样一旦报错能快速定位是哪个文件的问题。有一个需要注意的点TBtools某些版本中文件路径应避免包含中文或空格否则可能无法正确读取。我在Windows系统上遇到过路径中有中文导致程序直接没有任何反应的情况。如果你遇到这种情况先把项目目录改成纯英文路径基本能解决。另外确认你的Java环境是64位且版本不是太老TBtools 2.x在JDK 8及以上的环境里体验比较稳定。3.2 参数面板调整染色体显示、内外环开关参数面板里的项目看着很多但核心就几类。第一类是“染色体模板”相关参数你可以调整染色体在圆周上显示的粗细、颜色。第二类是“环”相关参数TBtools允许你添加多个同心圆环常见内环是基因密度或Ka/Ks外环是基因位置或散点。第三类是“连线”相关参数包括连线颜色、连线宽度、是否只显示正向连接等。我一直建议新手把面板里的“显示标签”选项先打开但字号调小一点。因为很多报错或数据问题能通过标签直观暴露出来比如基因ID错乱、染色体名重复。等图整体没问题了再关掉或调整标签。参数调整没有绝对标准但有一个套路先全用默认参数出图然后在默认图基础上每次只改一个参数观察变化。不要一次性把颜色、线宽、字号、旋转角度全部改掉否则出了问题根本不知道是哪个参数导致。我自己在带学生时会要求他们记录每次修改的参数和出图效果这就是最简单的“调参日志”。3.3 试运行与预览先小数据跑通再full dataTBtools的Circos在数据量较大时计算比较费时动辄几分钟甚至十几分钟。为了不浪费时间我强烈建议做一次“小数据测试”。方法很简单从染色体文件中只挑两条染色体从基因位置和link文件中只保留这两条染色体上的记录然后把这个小文件集先在TBtools中跑一次。小数据测试的目的有三个一是验证文件格式是否正确二是看连接线是否按预期出现三是快速确认方向感和染色体排列顺序。等小数据图符合预期后再换成完整数据跑输出。这个习惯帮我避开过至少三次“白等十分钟然后报错”的尴尬。还有一个容易被忽视的细节是TBtools在绘图前会检查文件中的染色体ID是否在染色体信息文件里存在。如果你在link文件中写了chr1而染色体信息文件里叫Chr1程序会报错或者直接跳过这些基因。这类大小写问题在小数据测试中会第一时间暴露完整跑的时候才会让人抓狂。4. 让图能发文章配色美化与输出设置4.1 配色逻辑从土气到高级的关键很多人第一次用TBtools出图出来的效果往往像默认Excel图表一样“朴素”颜色之间缺少呼应。其实Circos图配色有三个简单原则同一类数据用同一色系、不同染色体之间避免高饱和对比色、连线颜色与外环数据颜色有逻辑关联。比如做植物基因家族分析时可以用浅灰到深蓝的渐变色表示基因密度用橙色系表示Ka/Ks值用红色连线表示基因复制事件这样读者一眼就能抓住重点。如果对配色没有把握可以去参考已经发表论文中的Circos图风格。拿到一张你觉得好看的图先用取色器把主色色号取出来记录下它的Hex码再在TBtools的颜色输入框中直接填入。这个方法比你自己凭空想象配色要有效得多。另外要注意期刊对图片颜色有潜在要求虽然不强制但红绿色盲读者可能无法区分红绿对比建议优先使用蓝橙或紫绿这类色盲友好的组合。4.2 环内信息分层密度、Ka/Ks、表达谱如何排布Circos图可以叠加多个环形数据但环不是越多越好。我见过一些同学把四个环全塞进一张图结果密密麻麻审稿人看了直摇头。我的建议是一张Circos图讲一个核心故事。如果核心是“基因家族成员的染色体分布”那内环放基因密度外环放基因定位再加一层link表示共线性就够了。如果确实要展示Ka/Ks建议用柱状环表示并且设置统一坐标范围。很多新手在TBtools中为Ka/Ks环设置坐标范围时直接留默认值导致个别高值把整个环拉伸得很不均匀。正确做法是先看一下Ka/Ks的数据分布比如绝大多数值在0到2之间就把纵轴范围设为0到2并把个别异常高值单独注释这样图才经得起细看。表达谱数据如果要上环我一般用热图模式将不同组织或处理下的表达值归一化后映射颜色。归一化的方法推荐Z-score或log2(TPM1)不要在原始表达量上直接映射颜色不然高表达基因会把低表达背景压成一片白色。TBtools本身不负责归一化你可以先用Excel或R处理后再导入。4.3 文本标签防重叠与字体大小Circos图上的基因ID或染色体名一旦多起来重叠问题就会很严重。TBtools中文本重叠的根源通常是字号太大而字体间距不足。可以先把字号调小到6到8磅看看效果如果还是重叠再考虑通过“只显示部分标签”或者“按一定步长显示”来减轻。有一些版本的TBtools支持标签避让但效果有限最稳妥的策略是“标签越少越好”。我的做法是染色体名必须完整显示基因名默认不显示或只显示自己关注的几个候选基因。比如做基因家族分析时我会单独在图中标记几个已知功能基因其他成员只以柱或点表示。这样既保留了Circos图的空间感又突出了重点基因。别把Circos图当成基因ID速查表它的任务是让读者看懂分布规律。如果期刊对字体有要求比如必须用Arial或Times New Roman可以在后续用Adobe Illustrator进一步编辑。TBtools导出的PDF通常能保留文本对象这为后期微调留下了很大空间。4.4 输出格式与分辨率出图前务必想清楚这张图最终用在哪里。如果只是组会汇报PNG格式、300 dpi足够如果准备投稿最好输出PDF或SVG矢量格式方便后期拼图时缩放不损耗清晰度。TBtools的导出路径一般在绘图结果窗口中你可以选择保存位图文件或矢量文件。我通常的做法是先在TBtools里把所有参数调到满意输出一张PDF再用Adobe Illustrator打开微调标签位置、补上注释文字、统一字体。在这个环节中PDF的优势就体现出来了——所有元素都是可选的矢量对象不会像位图那样一放大就糊。如果你不会AI也可以用Inkscape这个免费软件完成类似操作。要记住投稿图的最终质量不只由TBtools决定后期编辑占到一半功劳。5. 基因家族分析场景下的Circos图实战延伸5.1 用Circos展示基因家族成员的染色体分布“基因家族分析”是TBtools最热门的应用场景之一。拿到目标物种基因组和基因家族成员列表后最简单的Circos图就是展示这些成员在每条染色体上的分布。这种图比传统的竖线分布图更直观因为能同时叠加染色体长度比例、基因密度背景和家族成员位置。具体做法是在基因位置文件中只放家族成员的位置link文件留空然后在内环添加一个基因密度环作为背景。这样生成的图可以清楚看到家族成员是均匀分布还是成簇存在。植物中不少抗病基因家族比如NBS-LRR偏爱在染色体端粒附近成簇这种图一眼就能看出来。如果你同时画了多个物种或亚基因组的比较还可以用不同颜色区分不同家族亚类。比如把NLR基因中的CNL和TNL分别标成蓝色和橙色再在环上用图例说明。这样的Circos图不仅美观信息量也足够支撑论文正文的描述。5.2 共线性区块与基因复制事件的联动展示基因家族分析越来越依赖共线性分析来推断基因复制事件和进化关系。MCScanX输出的共线性结果可以直接整理成TBtools的link文件把同源基因对连线画在Circos图上。这时候连线的颜色和宽度还可以承载额外信息。比如你可以把串联重复事件tandem duplication的基因对标成红色把全基因组复制事件WGD/segmental duplication标成蓝色。操作方法是在link文件第三列写上不同颜色再在图中通过图例说明颜色含义。这里有一个实操心得因为串联重复的基因通常相距很近连线会是一条非常短的弧线如果你发现短弧线数量很多图上会显得杂乱可以考虑把tandem重复单独抽出来做成内环放大图而不是全部堆在同一张Circos图上。共线性连线还有一个小技巧可以让连线宽度对应共线性分数或Ka/Ks值。在TBtools中如果link文件支持数值列映射宽度你可以把共线性分数标准化到0.5到3之间分数越高线越粗。这样读者能快速找到高置信度的同源关系。5.3 多亚基因组/物种的比较布局如果你做的是异源多倍体比如小麦、油菜、棉花Circos图还有一个很漂亮的用法把不同亚基因组的染色体分成区块显示在同一圆内用不同颜色区分亚基因组来源再用link展示亚基因组之间的同源关系。实际操作上染色体信息文件需要为每条染色体加一个分组标识有些版本的TBtools要求染色体ID本身带有亚基因组前缀例如A1、B1、D1。整理数据时要注意link文件里的染色体ID必须与染色体信息文件完全一致如果某个基因来自A亚基因组它的染色体列就要写A1而不是1。这种跨亚基因组的Circos图在论文里非常出彩但数据整理也最容易出错。我的建议是先用亚基因组A和B各取一条染色体做小范围试画确认连线方向没有“跨图穿越”后再加入完整数据。这类图一旦染色体排列顺序不对连线会横七竖八完全没法看。6. 我踩过的坑TBtools Circos常见报错与排查链路6.1 染色体位置越界一个隐藏的“单位”问题有一次我帮同事画小麦的基因分布图明明GFF里基因坐标都在染色体长度范围内但TBtools始终提示部分记录越界。检查了很久才发现染色体长度文件里用的单位是Mb而基因位置文件里用的是bp。染色体长度写了43270923其实是43.27 Mb基因位置写的是43270000单位却是bp看起来和谐实际差了1000倍。这类问题最隐蔽的点在于程序不会告诉你“单位不一致”只会告诉你“坐标超出范围”。排查链路是这样的先确认染色体长度文件中的数值是否和.fai文件完全一致再看基因位置文件的坐标是否都在对应染色体长度以内如果个别基因报错用awk把对应区间打印出来核对是否因为基因跨过了染色体端粒导致异常记录混入。自那以后我每次整理坐标文件时都会顺手写一句注释记录单位和来源。TBtools不关心单位它只关心数值的大小关系但我们的数据必须心里有数。6.2 连接文件基因ID对不上与缺失值link文件最常见的报错是“gene xxx not found”这在Circos中几乎每天都会发生。原因往往是link文件中的基因ID在基因位置文件中不存在或者ID格式有细微差别。比如基因位置文件里是Os01g0100100link文件里却是Os01g0100100.1多了一个转录本版本号程序就会报错。我的排查方法是先把两个文件的基因ID集合做一次比对cut -f1 family_position.txt | sort -u id_in_position.txt cut -f1,2 link.txt | tr \t \n | sort -u id_in_link.txt comm -23 id_in_link.txt id_in_position.txtcomm -23会列出link文件中有、但位置文件中没有的ID这些就是要修正的对象。如果是版本号差异用sed s/\.[0-9]*$//批量去掉后缀即可。如果某个基因确实没有位置信息那这条link记录只能删掉强行保留只会让程序中断。6.3 中文标签和特殊符号导致乱码基因家族分析中一些自定义文件名或注释可能包含中文。TBtools的界面支持中文但在Circos导出时中文字体处理并不总是理想。我有一次把染色体标签改成了中文“1号染色体”屏幕上预览正常导出PDF后打开却全是方块。这个问题的根源通常是字体不匹配。TBtools在导出时可能调用的是JVM默认字体而不是操作系统的中文字体。处理方案有两种一是所有标签尽量使用英文或数字ID中文信息放到图例中用绘图软件添加二是如果坚持用中文先导出SVG再用AI或Inkscape重新设置中文字体确保字体嵌入正确。顺带提醒一句特殊符号如正负链的、-一般没问题但、、这类XML预定义实体在某些导出格式中会被转义或报错避免在标签中使用这些字符。6.4 大数据量与内存溢出改最大堆内存的处置基因家族规模大时TBtools Circos也可能直接卡死或提示OutOfMemoryError。这时候不是你的数据错误而是JVM默认内存不够。TBtools启动脚本里有一个最大堆内存参数通常建议调到4GB以上。不同操作系统的改法不一样Windows下是编辑TBtools.bat或启动配置文件里的-Xmx参数Linux/Mac下是调整启动脚本中的JVM参数。我身边不少同学卡在“点了Start没反应”最后发现是内存不足导致程序在后台反复GC但出不了图。改成-Xmx8g后几万条link也能跑完。这里要注意如果染色体长度文件很大内存消耗主要来自关系计算和环层数据读取不是简单的文件大小问题所以尽量在前期过滤掉无关连接不要把整个全基因组共线性结果一次性塞进去。还有一个看似无关但实际影响很大的细节关闭杀毒软件或让TBtools所在目录加入白名单。某些杀毒软件会在程序运行时扫描临时文件导致TBtools在生成中间文件时异常缓慢。我第一次帮同事排查时她电脑杀毒软件把TBtools的临时目录锁住了图跑到一半就消失关了杀毒软件后一切正常。最后分享一个小习惯用TBtools画Circos图这件事我前前后后画了不下百张最大的体会是“数据整理的时间永远比点按钮的时间长”。不要嫌准备输入文件麻烦也不要一上来就追求复杂美化。先把最简单的三文件跑通再逐步叠加密度、Ka/Ks、表达谱、共线性每一步都观察图的变化这样最终出来的图你心里才有底。另外我会把所有版本的文件命名规范好比如01_chr_length.tsv、02_gene_pos.tsv、03_link.tsv、04_ka_ks.tsv并把调参后的参数记录在一个文本文件里。这样做既能保证投稿时可复现也方便写“材料与方法”时直接描述参数。TBtools的Circos图只是分析链条的最后一环前面的每一步认真处理后面的图才经得起审稿人拿放大镜看。