新闻详情

新闻详情

首页 / 资讯中心 / 详情

TBtools绘制Circos图全攻略:基因家族染色体分布可视化

发布时间:2026/10/1 11:42:24来源:尧图网络
TBtools绘制Circos图全攻略:基因家族染色体分布可视化
前阵子帮一个师弟做基因家族分析流程跑到最后一步卡住了基因家族成员在全基因组上的分布情况需要用一张图展示给审稿人。他翻了半天教程不是让写R代码就是让配Perl脚本折腾了一整晚也没出图。后来我用了TBtools自带的Advanced Circos模块前前后后不到十分钟就把他要的图搞定。这篇文章就把这套“TBtools绘制Circos图”的方法完整写出来从原理、数据准备到参数调节再到我自己踩过的一些坑希望能让后面做基因组可视化的朋友少走弯路。先说清楚这篇内容适合谁看。如果你正在做基因家族分析、比较基因组、或者单纯想把基因在染色体上的密度分布画出来且不太想碰代码那这篇攻略就是给你准备的。哪怕你之前完全没用过TBtools只要会基础的Excel操作跟着下面的步骤走也能在半小时内跑出一张能放进论文的Circos图。1. Circos图是什么为什么基因家族分析离不开它1.1 一张图解决“基因在染色体上怎么排”的问题Circos图本质上是一种环形布局的可视化图表最早主要用于基因组学数据展示。它的核心优势在于把线性染色体弯成一个圆外层放上染色体编号和刻度内层就可以叠加各种数据轨道。在做基因家族分析时最常见的一种需求就是展示“这个家族的成员在每条染色体上分布了多少、有没有成簇现象”。我见过很多研究生的第一版基因家族染色体分布图是用Excel画成长条形的。长条图当然也能表达但如果你有12条甚至更多染色体长条排在一起占版面不说还不直观。Circos图把所有染色体放在一圈里基因密度高的区域一眼就能看出来而且不占地方放到论文里又省空间又好看所以很多主流期刊都愿意接受这种呈现方式。1.2 除了基因密度Circos图还能展示什么Circos图能承载的信息量远不止基因密度一项。我经常用到的组合是外层显示染色体编号和长度刻度内层第一条轨道显示基因密度第二条轨道显示SNP密度中间如果再拉几条连线表示基因之间的共线性关系整个图就非常立体了。做基因家族分析的时候Circos图还有另一个用处——展示“基因复制事件”。比如全基因组复制产生的共线性区块在Circos图里用色带连起来远比用文字描述“某号染色体与某号染色体存在大片段共线性”有说服力。这也是为什么比较基因组学论文里Circos图几乎成了标配。1.3 为什么选择TBtools而不是R包或Perl画Circos图有三个常见路线官方Perl版本的Circos、R语言的circlize包、TBtools图形化界面。官方Circos的功能最强大但配置文件的写法比较繁琐说实话新手光调一个颜色就能搞一小时。R语言的circlize也很灵活但需要写代码而且不同版本包更新时语法可能会有变化。TBtools的优势在于完全图形化鼠标点一点就能出图。虽然它的Circos模块灵活度不如前两者但对于“画一张标准的基因密度Circos图”这个需求来说已经绰绰有余了。特别是做基因家族分析这种重复性比较高的任务TBtools可以让流程标准化换一个家族、换一组数据重新跑一遍即可基本不需要调参成本。2. 画图前必须准备好的两个数据文件2.1 先搞懂TBtools的Circos需要什么格式的数据很多人在第一步就出问题是因为没搞明白TBtools的Advanced Circos到底需要什么样的输入数据。它本质上是把染色体长度和基因位置叠在一起然后按窗口统计基因数量所以至少要准备两份文件第一份是染色体长度信息告诉软件一共有几条染色体、每条染色体有多长。第二份是基因位置信息告诉软件每个基因在哪条染色体的哪个区间上。两个文件准备好了剩下的就是参数微调。这一点理解了后面所有操作其实都很顺。因为软件本身不负责帮你整理数据你的GFF文件、注释文件里内容再多只要没提取成它要求的格式它就一概不认。我见过有人直接把GFF3原始文件拖进去结果出来的图一片空白还以为是软件装错了。2.2 从GFF文件快速提取染色体长度和基因位置绝大多数真核生物基因组注释文件都是GFF3或GTF格式。提取基因位置最直接的办法是用awk命令。假如你的基因组注释文件叫genome.gff3基因结构注释里的第三列会有CDS、exon、gene、mRNA这些记录我们要的是第三列为gene的那行。awk -F \t $3gene {print $1\t$4\t$5\t$9} genome.gff3 gene_position.txt这条命令的意思是以Tab为分隔符找出第三列是gene的行输出染色体编号、起始位置、终止位置以及第九列的注释信息。生成的gene_position.txt就是一张最基础的三到四列位置表。染色体长度文件更简单如果你有参考基因组的.fai索引文件直接切前两列就行cut -f1,2 genome.fasta.fai chr_length.txt如果没有.fai文件也可以用samtools faidx先生成索引或者直接去NCBI把每条染色体的长度抄下来整理成两列也完全没问题。2.3 只提取特定基因家族成员的位置信息前面说的是提取全部基因但基因家族分析经常只需要关注某一个家族几十个基因的位置。这时候可以先把家族成员ID整理好再去GFF文件里匹配位置。比如你已经从Pfam或InterPro扫描结果里拿到了基因家族成员列表family_member_ids.txt一行一个基因ID想从全基因组注释中挑出它们的位置grep -w -f family_member_ids.txt genome.gff3 | awk -F \t $3gene {print $1\t$4\t$5\t$9} family_position.txt但直接grep容易出现一个问题基因ID和mRNA ID、转录本ID会相互干扰。比如你先在HMMER结果里拿到的是蛋白ID如XP_001234567.1而GFF文件里记录的是基因IDgene-12345这就对不上号了。我一般会先写个小脚本把基因名的对应关系整理好再提取坐标。实际操作中可以先在Excel里把每个家族成员的基因ID从注释文件中vlookup出来然后再用这些ID去匹配这样虽然操作多两步但不容易出错。2.4 数据格式检查的三个细节文件准备好了但格式不对照样出不了图。我总结了三个最容易踩的坑第一分隔符必须是制表符Tab不能用空格。Excel打开能看、能用但如果你在Windows里用记事本或者某些编辑器编辑过文件行尾可能会有隐藏字符建议用VS Code或Notepad这类工具转换一下。第二染色体编号必须完全一致。GFF文件里如果写的是Chr1长度文件里写的是chr1多一个小写字母cTBtools就会认为它们是两条不同的染色体结果图里会多出一条空圈或者干脆空白。第三坐标正负链无所谓但起始和终止位置最好统一小的在前大的在后虽然TBtools一般能自动识别但文件干净一点总归没坏处。我自己习惯在做完文件之后先快速看一眼预览head gene_position.txt head chr_length.txt确认前几行格式没问题再导入TBtools这一步能省下后面大量的排查时间。3. TBtools绘制Circos图的完整实操过程3.1 定位到Advanced Circos模块并完成数据导入打开TBtools后窗口顶部菜单栏选择Graphics在下拉菜单里找到Advanced Circos点击即可进入绘图界面。不同版本的TBtools菜单位置可能略有差异如果你下载的是用Java重写的新版入口可能叫Advanced Circos也可能在子菜单里名字变来变去但关键词里都有Circos搜索一下就能找到。进入界面后第一步填入染色体长度文件也就是之前整理的chr_length.txt。第二步填入基因位置文件也就是gene_position.txt。注意TBtools的Advanced Circos并不一定要求你提供严格的BED格式它允许有表头但最好保持简洁。如果位置文件有3列以上TBtools会自动识别前几列分别对应染色体、起始、终止。填好之后可以看到面板上有几个默认参数。这里先不要着急点Start检查一下有没有“利用选择的文件类型”之类的选项。如果它问你是基因密度作图还是基因覆盖度作图通常选基因密度Gene Density就好待会出来的图比较顺眼。3.2 参数调节窗口大小、颜色渐变和阈值我第一次用这个模块时直接用了默认参数图是出来了但整个圈上基因密度几乎全是均匀的一片色看不出任何集中趋势。后来才明白是窗口大小的锅。Advanced Circos会把每条染色体切成一个个窗口然后统计每个窗口内的基因数量用颜色深浅表示数量高低。如果窗口设置得太大每段包含的基因都差不多颜色就没有区分度如果窗口设置得太小又会有很多窗口的基因数为0图看起来很碎。这个参数名称在不同版本里可能叫Window Size或者Bin Size一般默认为100kb或200kb。实际画基因家族密度时我会根据基因组大小调整基因组500Mb左右窗口100kb出图效果比较平滑基因组小于200Mb窗口降到50kb做单个基因家族成员分布时窗口甚至可以不开密度统计直接用点状标记处理。颜色设置也很重要默认的绿色渐变其实在打印成黑白论文时会被完全抹平。为了保险起见我一般会用蓝色到红色的渐变也就是低密度浅蓝、高密度深红。这种配色在彩打和黑白打印条件下都有不错的辨识度。阈值项Threshold或Maximum Value影响的是颜色映射的标尺如果基因密度集中于某一条染色体其他染色体颜色都很浅甚至空白可以试着降低阈值让色阶的区分度更大。3.3 运行出图和图片导出参数设置完成后直接点击Start按钮。TBtools会弹出一个新的展示窗口图像会以矢量的形式渲染。如果你在数据文件准备阶段没有明显错误这一步几秒就能出结果。看到图之后先别急着导出花十几秒检查一下三条信息最外圈染色体编号是否正确、有没有哪条染色体很短却显示成一大段、内圈密度轨道的深浅层次是否合理。如果没问题就可以点击Export导出图片。TBtools支持导出PNG、SVG、TIFF等格式。我个人的习惯是如果只是给导师或组会看导300dpi的PNG就够了如果要投论文一定导出SVG矢量图之后放到Illustrator或Inkscape里面补充基因名、缩放条输出600dpi的TIFF这样就算补几轮审稿意见图也经得起放大。3.4 实操中我常用的出图前检查流程这里补充一个我自己的经验流程不一定适合所有人但确实帮我省了不少时间导入文件后先不管颜色和阈值直接用小尺寸窗口快速出一次图看染色体的外形和编号对不对确认无误后再调整颜色参数重新出图。这就像写代码先跑通再优化一样可以避免为了调色等可视化参数浪费太久。另外不要忽略输出窗口的日志信息。TBtools在运行时会在界面上打印类似“reading input file…”“generating plot…”这样的提示如果输入文件格式错误日志里通常会有明确的报错行号那里会直接告诉你是哪一行格式不对。很多人忽略这个信息其实它比去论坛提问还靠谱。4. 画图失败和效果不佳时的排查经验4.1 完整画出来了但里面是空的或只有一圈线条这种情况80%是基因位置文件没被正确读取。先打开你的gene_position.txt用head看一下确认里面确实有数据且每列用Tab分隔。如果文件是空的那检查一下GFF文件自身有没有问题有的物种注释文件第三列不写gene而是写mRNA或者CDS这时把awk的条件改成$3mRNA提取mRNA的坐标作为基因位置信息也可以兼容。另一种可能是染色体名称不匹配。TBtools在绘制时会先用染色体长度文件建立坐标系统然后去位置文件里找匹配项找到不到就会跳过。所以我会用下面这个命令快速对比两边染色体编号有没有差异awk -F \t {print $1} chr_length.txt | sort -u chr_len_list.txt awk -F \t {print $1} gene_position.txt | sort -u chr_gene_list.txt diff chr_len_list.txt chr_gene_list.txt如果diff输出有内容就说明两边命名有出入去Excel里批量改一下名称即可。4.2 整个圈颜色很均匀看不出基因密度差异这不一定是你数据的锅更可能是参数没调对。我建议先把窗口大小调小一半重跑一次比如是200kb就改成100kb再看看颜色分布是否有层次。如果还是没有就检查一下阈值设置把这个值调低让高密度区域更快达到颜色深度的上限。还有一点值得提的是如果你的物种基因组本身基因密度就特别高比如一些微生物基因组整圈基因密度都很高那Circos图的基因密度轨道意义就不大。这种情况更适合展示基因家族的分布位置而不是所有基因的密度或者说你把阈值调到一个较高的值但出图效果依然不理想就可以考虑用后面讲的JCircos做更灵活的定制。4.3 出图后染色体长度比例奇怪或个别染色体显示不全这个问题通常出在染色体长度文件上。有的参考基因组会包含scaffold、contig如果你把几百条scaffold全部加进去图会被切得密密麻麻比例也不对。我一般只保留主染色体上的序列过滤时可以用染色体名称列表做白名单或者用awk过滤掉含有scaffold或contig的行。另外检查一下长度文件排序如果染色体顺序是随机的图上的染色体排列也会是无规律的。建议按照染色体编号1、2、3的顺序排列TBtools会从上到下按你的文件顺序一圈一圈排布。4.4 常见问题速查表我把这几年在不同机器、不同版本TBtools里遇到的问题整理成一个表方便大家快速定位现象可能原因解决办法图出来但内部无数据位置文件格式错误或染色体名不一致检查Tab分隔、head预览、diff比对名称只有部分染色体有数据染色体命名部分不匹配统一大小写和前缀如Chr与chr颜色一片平窗口过大或阈值过高调小窗口Size、降低Maximum Value通道画得很碎窗口过小适当调大窗口Size染色体数量过多包含了scaffold/contig过滤非主染色体序列导出后文字模糊导出了PNG但分辨率低导出SVG再转600dpi TIFF4.5 几个独家避坑技巧除了上面这些我再分享三个常规教程里不会写到的经验。第一个TBtools的Circos模块对中文路径极其敏感。如果你的项目文件夹路径里带有中文或者文件名是中文很容易在出图时报各种奇怪的错。解决办法很简单建一个纯英文路径的文件夹把数据文件放进去再跑。第二个如果你需要在图上显示基因名称标签Advanced Circos的标签排列有时会互相重叠、遮住轨道。我的做法是在位置文件中保存的基因ID尽量短比如只保留前缀“G00001”而不是一长串带版本号的完整ID。标签越短重叠概率越低可读性越高。第三个出图用的字体在Windows和Linux系统上有差异如果你把SVG拿到别的电脑上编辑字体可能会被替换成系统默认字体导致位置偏移。稳妥的做法是导出SVG后直接转成PDF嵌入字体再在AI中编辑。如果你是Mac用户建议统一用Arial或Helvetica这类跨平台字体。5. 进阶玩法让Circos图在基因家族分析里更有说服力5.1 用JCircos实现自定义轨道和图内标记Advanced Circos适合快速出图但它默认以密度轨道为主。如果我想突出显示基因家族中的20个成员在染色体上的具体位置单靠密度图不够直观因为周围还有其他基因密度高不一定代表家族成员集中在那里。这时候我会改用TBtools里的另一个模块JCircos。它的操作思路和Advanced Circos不同更像是“让用户手动配置多个数据轨道”。你可以添加一个轨道专门用来放基因家族成员的位置点每一个基因标一个小色点颜色与密度图区分开整张图的信息量就会丰富很多。JCircos的数据文件格式要求也不复杂本质上还是染色体、起始、终止三列如果有需要可以再加第四列作为轨道数值。用法上多点几次鼠标就能摸清但参数多所以第一次上手建议边看预览边调整。5.2 结合MCScanX共线性数据画内部连线基因家族分析做到后期大家都会关心家族成员之间的复制关系。这时候单纯一张基因密度Circos图就不够了最好能把共线性区块也画进去。TBtools提供了一些与MCScanX结果联动的工具比如可以利用MCScanX输出的collinearity文件在Circos图中绘制基因间的连线表示哪些基因是旁系同源或直系同源。连线图比密度图更容易被审稿人认可因为它直接展示了进化事件。我的做法是先用MCScanX跑出共线性基因对把基因对的染色体和位置提取出来整理成“每行一对坐标”的格式再在JCircos里添加一个Link轨道选择这个文件就能画出漂亮的内部连线。实际操作时要注意连线轨道的颜色尽量选半透明的色系不然连线多了会遮住底层的密度轨道。5.3 用“密度图散点标记连线”三合一的完整套路在一次完整的基因家族分析展示里我使用的组合是底层用Advanced Circos或JCircos出全基因组基因密度底色中间层叠加家族成员位置散点最内层再拉出共线性连线。这样一张图同时回答了三个问题全基因组基因是怎么分布的、目标家族成员集中在哪里、它们之间有哪些同源关系。审稿人看完基本不用再看额外补充材料。出图顺序上我不会从头到尾都在TBtools里完成。TBtools负责出基础图后来的散点高亮、添加图例、加文字注释我会导出SVG后到Illustrator里面做微调。这样既能利用TBtools的快速出图优势又能在最终排版上做到精细控制。画完图之后有个小细节很多人不注意——图例。Circos图如果连图例都没有读者根本不知道外围颜色深浅代表什么。TBtools导出的图不一定带图例建议在排版软件里自己加一个渐变图例标注清楚“低密度到高密度”的对应关系。这个细节缺失导致返修的几率远远超过你的想象。5.4 这套技能能用到哪些研究场景学完这个操作以后你会发现它的应用场景比预想的多。做全基因组复制分析可以画比较基因组学中不同物种间的共线性可以画转录组中差异表达基因在染色体上的分布也可以画。甚至不需要基因家族分析只要手上有染色体坐标信息就能用同一套流程快速出图。我自己后来做的一个项目需要把某个代谢通路的全部基因在不同物种中的分布展示出来。当时就是用TBtools批量跑了十来个物种的数据每个物种生成一张Circos图然后统一处理排版整个过程不到一天就完成了。如果是用R代码光想怎么循环出图可能就要写一上午。写在最后从实际操作体验来说TBtools的Circos功能并不追求像官方Circos那样无所不能它更像是给生物信息学分析链条里补上了“最后一公里”的拼图。你前面费很大力气跑完基因家族筛选、构建系统发育树、算完选择压力到了展示这一步如果卡住了那就太亏了。用这套攻略熟练之后正常人十分钟之内画出一张Circos图是完全不夸张的。最后再分享一个小经验每次画图前把输入文件、参数截图、结果图存到同一个文件夹里命名加上日期。因为这个东西画起来太顺手很多研究会反复修改数据重新出图有一个规范的项目管理习惯找起旧图来会感谢自己。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

vLLM 0.27 device_ops:GPU可移植抽象层深度解析 2026/10/1 13:16:52

vLLM 0.27 device_ops:GPU可移植抽象层深度解析

1. vLLM这次重构不是“推倒重来”,而是GPU抽象层的精准外科手术vLLM最近在0.27版本中做了一件让很多老用户皱眉的事:它把沿用多年的CUDA抽象层——那个被称作cuda_utils、cuda_executor、CUDATensor的整套封装——给拆了。不是渐进式迭代,是直…

阅读更多 →
亚马逊封锁AI代理,Shopify开放:电商数据主权与运营效率的博弈 2026/10/1 13:16:51

亚马逊封锁AI代理,Shopify开放:电商数据主权与运营效率的博弈

1. 当电商平台开始对AI代理说“不”过去一年里,做跨境电商独立站的朋友圈里讨论最多的话题之一,就是AI代理到底能不能真正接管店铺运营。这个问题的引爆点,源于一个很有意思的分裂局面:一边是亚马逊明确限制第三方AI代理直接访问其…

阅读更多 →
提示词工程实战:从鹈鹕自行车测试到Agent开发 2026/10/1 13:16:51

提示词工程实战:从鹈鹕自行车测试到Agent开发

最近圈子里流传一个很火的测试题:让大模型生成"一只骑自行车的鹈鹕",而且要求给出SVG代码。头一回看到我问号拉满,觉得不过是娱乐梗,结果真拿几个模型跑了一遍,差距一下就出来了——有的模型把自行车画成三个…

阅读更多 →
基于Docker与Redis的分布式爬虫服务:架构编排与避坑实践 2026/10/1 13:16:51

基于Docker与Redis的分布式爬虫服务:架构编排与避坑实践

简介:一套基于Docker的分布式爬虫服务项目资源,以Go语言实现核心爬虫逻辑,并配合容器化部署方案,适合正在学习分布式系统、爬虫开发或容器编排的开发者,也可作为计算机相关专业课程设计、毕业设计或项目初期立项的参考…

阅读更多 →
Qoder项目+讨论:AI团队协作编程的进化之路 2026/10/1 13:16:51

Qoder项目+讨论:AI团队协作编程的进化之路

1. 为什么Qoder这次更新值得专门写一篇1.1 从“一个人用AI写代码”到“一群人用Agent干活”过去一年我用过的AI编程工具不少,从最早的单文件补全,到后来的多文件重构,再到现在的Agent自动跑测试、修bug,能力边界一直在往外推。但有…

阅读更多 →
K8s 容器环境下 Jenkins 插件路径的准确查找与实战指南 2026/10/1 13:16:44

K8s 容器环境下 Jenkins 插件路径的准确查找与实战指南

排查 Jenkins 问题的时候,很多人会撞上同一个坎:插件装了但好像没生效,或者想把一个离线插件放到服务器上,却死活找不到插件目录到底在哪。尤其是 Jenkins 跑在 Kubernetes 上之后,这个问题就更模糊了——你看到的路径…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉