Krona 简介:什么是 Krona、Krona 的应用场景、Krona 与其他可视化工具的对比

做生物信息分析,尤其是宏基因组这块,最难的不是跑流程,而是怎么把结果讲清楚。你给 PI 或者合作者看一个几十 MB 的 TSV 表格,谁都会头大。

Krona 就是来干这个的。它不是一个分析工具,而是一个交互式可视化报告生成器。它其实就是把你的物种分类或者功能注释数据,映射到了一个动态的扇形图上。

到底什么是 Krona?

Krona 的全称是 Krona Tools。它由俄亥俄州立大学开发,专门用来展示层级数据的占比关系。我个人特别喜欢它的交互式扇形结构——不用额外装任何软件,只要双击 HTML 文件就能在浏览器里打开。

核心特性其实就三条:

  • 交互式展示:鼠标悬停显示具体数值,点击可放大/缩小到某个分支
  • 即时响应:数据量再大也不会卡顿太久,页面的缩放动画很流畅
  • 零依赖部署:输出就是一个独立的 HTML 文件,不需要服务器,不需要网络

嗯,这个很关键。我在医院合作项目里交付结果时,对方的 IT 权限很严格,根本不让装软件。Krona 直接扔一个 HTML 过去就能看,省了大把沟通成本。

Krona 的应用场景

你想想看,什么场景下最需要看清谁占比多少、谁又隶属谁?Krona 在以下三个方向用得最多:

  1. 宏基因组物种注释
    用 Kraken 2 或者 MetaPhlAn 跑完物种分类,得到一个打分表。这表里的层级关系 — 从界门纲目科属种 — 用文本看特别累。Krona 一下子就把层级和丰度都画出来了。
  2. 功能基因/通路注释
    比如用 HUMAnN 3 输出的 Pathway 丰度,也带着层级。你可以在 Krona 里看到“碳水化合物代谢 → 糖酵解 → 某个具体酶”,每一步占比一目了然。
  3. 临床样本对比汇报
    我一般习惯把对照组和实验组分别生成两个 Krona HTML,然后并排放在浏览器标签页里对比。肉眼扫一遍就能发现哪个门的占比差异最大。
提示: 记得先确认你的输入数据是否包含层级信息(比如用 ; 或者 | 分隔)。Krona 不关心你的数据是物种还是功能,它只认层级分隔符。

Krona 与其他可视化工具的对比

我以前也常用 GraPhlAn、Pavian 和 iTOL。它们各有特长,但 Krona 在快速交互和超轻量部署这两个点上几乎没对手。

工具 输出格式 交互性 数据规模 部署难度
Krona 独立的 HTML 极强(放大/缩小/悬停) 适合 1k–10k 个分类单元 易
GraPhlAn PDF/PNG 弱(静态图) 适合 100–500 个分类单元 中
Pavian Web 应用(Shiny) 中等 适合 5k–50k 条 reads 较难
iTOL SVG/PDF 导出 中等(可在线交互) 适合 1k–5k 个 leaf 中

为什么我强调 Krona 更适合快速汇报?我之前在项目中期给客户看中期结果,数据还在不断更新。用 GraPhlAn 调参数要 20 分钟才能出一张图,而 Krona 从跑命令到生成 HTML 只要几秒钟。客户可以直接在浏览器里拉着看,不用等我重绘。

注意事项: 千万别拿 Krona 去画大规模系统发育树。Krona 的扇形图只适合表示层级占比关系,没法展示分支长度或 bootstrap 值。这方面还是得用 iTOL 或者 FigTree。

Krona 的生态定位:一张图看清

下面这张图能帮你快速理解 Krona 在整个分析流程中的位置——它既是数据出口,也是沟通桥梁。

Krona 生态定位图 Krona 在分析流程中的生态定位 输入 物种/功能丰度表 分类工具 Kraken2 / MetaPhlAn Krona 交互报告 自包含 HTML · 零依赖 交付 给合作者看 分析 对比样本 📌 为什么要用 Krona 做可视化? 1. Krona 吃的是已有分析结果,不重复计算 2. 生成的 HTML 文件可直接发送,对方零学习成本 3. 支持多层级嵌套,最适合宏基因组物种/功能解读

从这张生态图能看出来,Krona 处于分析流程的后半段。它的职责就是把上游产出的结构化数据,转化成任何人都能一眼看懂的交互式图表。

怎么开始用?Krona 的安装与基本用法

安装非常简单。Krona 是 Perl 写的,所以你需要先保证系统里有 Perl:

git clone https://github.com/marbl/Krona.git
cd Krona/KronaTools
./install.pl

我个人习惯把 Krona 装在 /opt 下,然后在 ~/.bashrc 里加一行 PATH 导出,这样就能全局调用了。

安装完成后,核心命令只有一个——ktImportText。它的用法大概是这样的:

ktImportText -o my_report.html my_abundance_table.txt

这里 my_abundance_table.txt 是制表符分隔的文本。每行代表一个分类单元,第一列是层级路径,第二列是丰度值。举个例子:

Bacteria;Proteobacteria;Escherichia	0.45
Bacteria;Firmicutes;Lactobacillus	0.30
Archaea;Euryarchaeota;Methanococcus	0.25

我在项目中经常用这个格式配合 Kraken2 的报告。Kraken2 输出的 report 文件结构稍微不同,但只要写一个小脚本把它的 % covered 列和层级路径拼起来,就完美适配 Krona 了。

经验之谈: Krona 的输入文件最好以 .txt 或 .tsv 结尾。记得列之间用制表符,不要混用空格。我刚上手时踩过这个坑,花了一小时排查为什么图是空的——说白了就是分隔符错了。

一个小例子:从 Kraken2 报告到 Krona 图

假设你已经用 Kraken2 得到了 sample.report。下面这条命令就可以一步生成:

ktImportTaxonomy -t 5 -m 3 -o sample_krona.html sample.report

参数 -t 5 表示第 5 列是分类单元数,-m 3 表示第 3 列是分类层级。这两个数字 Kraken2 的 report 格式是固定的。如果用了别的分类软件,记得先看一眼列顺序。

结果是什么? 双击生成的 sample_krona.html,浏览器里就会出现一个漂亮的交互式扇形图。最外层是最高层级,向内一层层深入。鼠标划过每个扇形片,会显示它的绝对数量和相对百分比。点击任意扇形片,图就会以那个节点为中心重新展开。

嗯,这个交互方式特别适合给非专业人士做汇报。你不用解释“这个门下面有几个纲”,直接让他们自己在浏览器里点点看就行。

注意: 如果数据很大(超过 20000 个节点),Krona 打开会稍慢。我建议先过滤掉丰度低于 0.1% 的分类单元再导入。后面几章我会专门讲怎么过滤。

小结

Krona 不是什么万能工具。它不做分析、不建模、不统计。但它把复杂的层级占比数据变成了一张可以“玩”的图。就凭这一点,它在我的项目汇报中一直是首选工具。

我把 Krona 和其他工具对比之后,结论很明确:如果你需要快速交付、零部署、强交互的层级占比图,Krona 是目前最省力的方案。