1. Krona概述:从数据堆里画出一朵花
我第一次见到Krona的环状图时,心里咯噔一下——这不就是我一直想要的物种丰度可视化吗?以前做宏基因组分析,看那些表格、柱状图,眼睛都看花了。后来才发现,Krona其实很简单,核心就三个东西:来源、场景、原理。今天我就把这三点掰开讲给你听。
1.1 Krona的起源
Krona是2011年由密歇根州立大学的Brian Ondov等人开发的。名字取自海洋中的「Krona」物种——没错,就是一种会发光的浮游生物。他们希望这个工具能像生物发光一样,让复杂的数据亮起来。
我自己的经历是这样的:当时在做一个肠道微生物项目,结果文件有几十兆,物种层级从界到种,光物种名就上千。用Excel打开直接卡死。后来同事推荐了Krona,我第一次运行就发出感叹:「这玩意儿把层级结构画成了同心圆,所有的比例关系一目了然!」
说白了,Krona就是一个交互式分层环状图的生成工具。它把原本需要手动整理的多层级分类数据,自动渲染成一个HTML页面,你可以在浏览器里缩放、点击、查看具体数值。它的核心输入就是每行一个分类条目+丰度值的表格文件。
1.2 应用场景
你想想看,哪些场景最需要这种分层环状图?我归纳了一下,主要有三类:
| 场景 | 典型数据 | 为什么用Krona |
|---|---|---|
| 宏基因组物种分类 | Kraken2/Bracken/BLAST 结果 | 一眼看出优势菌门、属、种的比例 |
| 微生物组功能注释 | KEGG/COG/CAZy 的层级丰度 | 展示通路、酶的分布层次 |
| 功能分类与比对 | GO slim / Pfam 结果 | 多层级功能扁平化展示 |
举个例子:我帮一位师兄处理了土壤宏基因组数据,他用Kraken2跑出了每个样本的物种列表。以前他要手动筛选丰度前10的物种画饼图,但饼图只能展示一层,比如「门」一级。而用Krona,直接把所有层级的数据一起渲染,从域到种都展示在一个图里。他甚至能点开某个「属」,看看里面包含了哪些「种」。这个交互能力,普通的静态图表根本做不到。
避坑指南:我曾经遇到一个坑——输入的丰度数据里,同一个物种在多个层级重复出现。Krona默认会叠加这些计数,导致环状图显示的比例错误。后来我加了一步去重:只保留最细粒度的物种条目。你也要小心这个。
1.3 工作原理
Krona的底层逻辑其实不复杂。你看它的图——一圈套一圈,内环代表更高级别的分类,外环代表更细的分类。比如:
- 最内环:界(Kingdom)
- 往外一环:门(Phylum)
- 再往外:纲(Class)
- 依次:目、科、属、种
每个扇区的大小代表该分类的丰度占比。点击某个扇区,它会放大,同时环的层级会向该分类的子层级展开。这就是交互的核心。
它背后是怎么处理的?简单来说:
- 读取数据:Krona接受一个制表符分隔的文本文件,每行包括一个物种的分类路径(用制表符分隔各层级)和一个对应的丰度值。
- 构建树结构:程序将这些路径解析成一棵多叉树,每个节点记录丰度。
- 布局计算:从根节点开始,按子节点的丰度比例计算每个扇区的起始角度和终止角度,然后递归到下一层。
- 生成HTML+JS:所有计算结果写进一个嵌入了JavaScript库的HTML文件。这个JS库负责交互(点击、缩放、悬停显示详情)。
核心命令就一行:
ktImportText input.tsv -o output.html
我给一个真实的例子。假设你的输入文件叫 species_profile.tsv:
Bacteria Proteobacteria Escherichia E. coli 5000
Bacteria Firmicutes Lactobacillus L. acidophilus 3000
Archaea Euryarchaeota Methanobrevibacter M. smithii 2000
Bacteria Proteobacteria Salmonella S. enterica 1500
Bacteria Actinobacteria Bifidobacterium B. breve 1000
运行:
ktImportText species_profile.tsv -o microbiome_krona.html
打开这个HTML文件,你就能看到一朵漂亮的环状「花」。内环是Bacteria和Archaea,外环逐步展开到种。我习惯用浏览器自带的缩放功能按 Ctrl + + 放大细看某个扇区。
注意:Krona生成的HTML文件依赖一个内置的JavaScript库(也就是ktImportText工具自带的Krona.js)。如果你把生成的HTML文件单独拷贝到别的机器上,要带上同目录下的Krona.js。否则交互功能会失效。我当初就因为这个在汇报时尴尬了一回,赶紧现场改了文件路径。
下面这张图概括了Krona的工作流程,你跟着看看就清楚了:
小技巧:Krona的输入文件不要求所有行有相同的层级深度。比如你有的物种只写到属,有的写到种,Krona会自动补齐缺失的层级。但实际上,为了图的美观和逻辑清晰,我建议统一层级深度(比如都用7层级:界门纲目科属种)。如果某个层级不知道,用“unclassified”占位。
嗯,说到这里,Krona的核心概念你应该都清楚了。它不是什么神秘的高深算法,本质就是一个命令行工具 + 一个JS可视化库。你只需要准备好格式正确的TSV文件,一行命令就能生成可交互的HTML报告。
我记得第一次成功跑出Krona图时,项目组的同事都以为我用了什么高级的BI工具。其实就一行ktImportText,加几分钟调整颜色和文字大小。这种成就感挺爽的,你马上也能体验到。