三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

从数据到美图:LEfSe分析结果可视化全攻略(条形图、进化树图一键生成)

从数据到美图:LEfSe分析结果可视化全攻略(条形图、进化树图一键生成)

从数据到美图:LEfSe分析结果可视化全攻略(条形图、进化树图一键生成)

在宏基因组研究中,找到组间差异显著的物种(biomarker)只是第一步。如何将这些统计结果转化为直观、可发表的图表,才是让数据真正"说话"的关键。LEfSe分析工具提供的可视化模块,能将枯燥的LDA score数据转化为色彩鲜明的条形图和层次分明的进化树图,帮助研究者快速抓住关键差异物种及其进化关系。

1. 可视化前的准备工作

拿到LEfSe分析结果文件(如hmp_aerobiosis_small.res)后,首先要确认几个关键点:

  • 文件完整性检查:确保.res文件包含完整的LDA score和p值信息。一个典型的输出文件前几行如下:

    Bacteria.Actinobacteria 4.12 0.01 Bacteria.Bacteroidetes 3.85 0.02
  • Python环境配置:LEfSe绘图工具依赖Python 2.7环境。如果遇到r2py报错,可尝试以下解决方案:

    conda create -n lefse python=2.7 source activate lefse conda install -c bioconda lefse matplotlib=2.0
  • 图表类型选择

    • 条形图:适合展示Top N差异物种的LDA score排名
    • 进化树图:适合展示差异物种的系统发育关系
    • 特征分布图:展示特定物种在各组中的丰度分布

提示:如果遇到axis_bgcolor()报错,需修改lefse-plot_cladogram.py源码中的该函数为facecolor(),或降级matplotlib到2.0版本。

2. 绘制LDA score条形图

条形图是最直观展示组间差异物种的方式。使用lefse-plot_res.py脚本时,有几个关键参数需要关注:

lefse-plot_res.py \ --format png \ --dpi 300 \ --title "Microbiome Biomarkers" \ --width 8 \ --height 6 \ hmp_aerobiosis_small.res \ biomarker_barplot.png

参数优化技巧

参数推荐设置作用
--orientationh/v水平/垂直条形图
--feature_font_size10-12物种名称字体大小
--max_feature_len40-60物种名称最大显示长度
--background_colorw/k白底或黑底

实际应用中,常遇到两类问题:

  1. 物种名称显示不全:通过--max_feature_len调整截断长度,或使用--subclades控制显示层级
  2. 颜色对比度不足:在lefse-plot_res.py源码中修改color_dict变量定义

3. 创建进化树状图

进化树图能同时展示差异物种的LDA score和系统发育关系。关键步骤包括:

lefse-plot_cladogram.py \ --format pdf \ --dpi 600 \ --abrv_stop_lev 7 \ --labeled_stop_lev 5 \ --colored_labels 1 \ hmp_aerobiosis_small.res \ phylogenetic_tree.pdf

树图优化要点

  • 层级控制
    • --max_lev:限制显示的最高分类层级
    • --abrv_stop_lev:设置缩写显示的截止层级
  • 视觉效果
    • --min_point_size/--max_point_size:调整节点大小范围
    • --clade_sep:控制分支间距(默认1.5)
  • 标注策略
    • --colored_labels 1:使用分组颜色标注物种名
    • --label_font_size:调整标签字体大小

典型问题解决方案:

  • 节点重叠:减小--clade_sep值(如0.8)
  • 标签拥挤:提高--abrv_stop_lev减少显示层级
  • 颜色区分度低:修改源码中的color_palette列表

4. 高级可视化技巧

4.1 组合图表输出

通过shell脚本批量生成多种图表:

#!/bin/bash # 生成条形图 lefse-plot_res.py --format svg input.res barplot.svg # 生成进化树图 lefse-plot_cladogram.py --dpi 300 input.res tree.pdf # 提取Top10物种生成特征分布图 grep -v "-" input.res | head -10 | awk '{print $1}' > top10.txt while read line; do lefse-plot_features.py -f one --feature_name "$line" input.in input.res "${line//|/_}.png" done < top10.txt

4.2 结果解读要点

在图表中快速定位关键信息:

  1. 条形图解读

    • x轴:LDA score的对数值(通常log10)
    • 颜色:代表该物种在哪个组别中显著富集
    • 长度:效应量大小
  2. 进化树图解读

    • 节点大小:对应LDA score大小
    • 节点颜色:显著富集的组别
    • 分支长度:反映进化距离(需输入数据包含此信息)

4.3 期刊出版级调整

为满足期刊要求,常需要:

  1. 矢量图输出

    lefse-plot_res.py --format svg --dpi 1200 input.res output.svg
  2. 字体统一: 修改源码中的font.family参数为常用学术字体(如Arial)

  3. 颜色方案调整: 在lefse-plot_res.py中找到color_dict变量,替换为ColorBrewer的配色方案

5. 自动化与批量处理

对于大量数据集,可建立自动化流程:

import os import subprocess def batch_lefse_visualization(input_dir, output_dir): for file in os.listdir(input_dir): if file.endswith(".res"): base_name = os.path.splitext(file)[0] # 生成条形图 subprocess.run([ "lefse-plot_res.py", os.path.join(input_dir, file), os.path.join(output_dir, f"{base_name}_barplot.png"), "--dpi", "300", "--format", "png" ]) # 生成进化树图 subprocess.run([ "lefse-plot_cladogram.py", os.path.join(input_dir, file), os.path.join(output_dir, f"{base_name}_cladogram.pdf"), "--format", "pdf", "--dpi", "600" ])

将此脚本保存为auto_plot.py后,通过命令运行:

python auto_plot.py ./results ./figures

实际项目中,我们常需要根据不同的微生物组研究目的调整可视化策略。例如在肠道菌群研究中,重点关注厚壁菌门/拟杆菌门比例时,可以特别放大这些分支的显示效果;而在环境微生物研究中,可能需要突出特定功能类群的分布特征。

← 返回列表