【python】基因组距离矩阵转化成heatmap图

写一个python程序,功能是将距离矩阵转化成热图可视化。输入文件为基因组差异的距离矩阵,格式为tab键分割的txt文件;矩阵第一行为基因组标签,第一列也为基因组标签;程序运行为python genomic_heatmap.py genomic_distance.txt;绘制的热图输出格式为png、svg、PDF、jpeg等格式,默认为png格式;输出文件名为除去扩展名的输入文件名,输出文件与输入文件同路径

以下是满足需求的Python程序。该程序从输入文件中读取基因组差异的距离矩阵(格式为Tab键分隔的TXT文件,第一行为基因组标签,第一列也为基因组标签),并将其转换为热图进行可视化。程序通过命令行参数传入文件路径,支持将热图输出为多种格式(如PNG、SVG、PDF、JPEG等),默认输出为PNG格式。输出文件与输入文件同路径,且输出文件名为输入文件名(除去扩展名)。

示例代码


import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import argparse
import os

# 从文件中读取基因组差异的距离矩阵
def read_genomic_distance_matrix(file_path):
    """
    从文件中读取基因组差异的距离矩阵。
    文件格式应为Tab键分隔的TXT文件,第一行为基因组标签,第一列也为基因组标签。
    """
    try:
        # 使用pandas读取文件,指定分隔符为Tab
        df = pd.read_csv(file_path, sep='\t', index_col=0)
        return df
    except Exception as e:
        print(f"读取文件时出错: {e}")
        return None

# 绘制热图并保存为指定格式
def plot_genomic_heatmap(distance_matrix, output_file, output_format='png'):
    """
    使用seaborn绘制基因组差异距离矩阵的热图,并保存为指定格式。
    """
    if distance_matrix is not None:
        plt.figure(figsize=(10, 8))  # 设置图像大小
        sns.heatmap(
            distance_matrix,
            annot=True,              # 显示数值
            cmap='coolwarm',         # 颜色映射
            fmt='.2f',              # 数值格式
        )
        plt.title('Genomic Distance Matrix Heatmap', fontsize=16)
        plt.xlabel('Genomes', fontsize=14)
        plt.ylabel('Genomes', fontsize=14)

        # 保存热图
        output_file_with_extension = f"{output_file}.{output_format}"
        plt.savefig(output_file_with_extension, format=output_format, bbox_inches='tight')
        print(f"热图已保存为: {output_file_with_extension}")
        plt.close()  # 关闭图像以释放内存
    else:
        print("距离矩阵为空,无法绘制热图。")

# 主程序
if __name__ == "__main__":
    # 设置命令行参数解析
    parser = argparse.ArgumentParser(description="将基因组差异的距离矩阵转换为热图。")
    parser.add_argument("file_path", type=str, help="基因组差异距离矩阵文件的路径")
    parser.add_argument("--format", type=str, default="png", choices=["png", "svg", "pdf", "jpeg"],
                        help="输出文件格式(png, svg, pdf, jpeg),默认为png")
    args = parser.parse_args()

    # 读取距离矩阵
    distance_matrix = read_genomic_distance_matrix(args.file_path)

    # 获取输入文件路径和文件名(除去扩展名)
    input_dir = os.path.dirname(args.file_path)  # 输入文件所在目录
    input_file_name = os.path.splitext(os.path.basename(args.file_path))[0]  # 输入文件名(除去扩展名)
    output_file = os.path.join(input_dir, input_file_name)  # 输出文件路径(与输入文件同路径)

    # 绘制热图并保存
    plot_genomic_heatmap(distance_matrix, output_file, args.format)

代码说明:

1. 命令行参数解析:

  • 使用 argparse 模块解析命令行参数。

  • file_path 是必需的参数,表示基因组差异距离矩阵文件的路径。

  • --format是可选参数,表示输出文件格式(支持 pngsvgpdfjpeg),默认为png

2. 读取文件:

  • 使用 pandas.read_csv 读取文件,并指定分隔符为Tab键(sep='\t')。

  • 设置index_col=0 将第一列作为行标签。

  • 文件的第一行应为列标签(基因组名称),第一列应为行标签(基因组名称)。

3. 绘制热图:

  • 使用 seaborn.heatmap 绘制热图。

  • annot=True表示在热图上显示数值。

  • cmap='coolwarm'指定颜色映射,适合表示基因组差异。

  • fmt='.2f'表示数值以两位小数的形式显示。

4. 保存热图:

  • 使用 plt.savefig将热图保存为指定格式。

  • 支持输出格式包括 pngsvgpdfjpeg

  • 输出文件与输入文件同路径,文件名为输入文件名(除去扩展名),扩展名由 --format参数指定。

5. 获取输入文件路径和文件名:

  • 使用 os.path.dirname 获取输入文件所在目录。

  • 使用 os.path.splitextos.path.basename 提取输入文件名(除去扩展名)。

  • 使用 os.path.join 构建输出文件路径。

6. 错误处理:

  • 如果文件读取失败,程序会捕获异常并提示错误信息。

输入文件示例:

假设基因组差异距离矩阵文件 genomic_distance.txt内容如下(Tab键分隔):

        Genome1    Genome2    Genome3    Genome4
Genome1    0.00        0.12        0.45        0.67
Genome2    0.12        0.00        0.34        0.56
Genome3    0.45        0.34        0.00        0.23
Genome4    0.67        0.56        0.23        0.00

运行程序:

将上述代码保存为 genomic_heatmap.py

在终端运行:

python genomic_heatmap.py /path/to/genomic_distance.txt --format pdf

或者使用默认设置:

python genomic_heatmap.py /path/to/genomic_distance.txt

输出结果:

程序会生成一个热图,并将其保存为指定格式的文件,与输入文件同路径。例如:

  • 如果运行 python genomic_heatmap.py /path/to/genomic_distance.txt --format pdf,程序会生成 /path/to/genomic_distance.pdf

  • 如果运行 python genomic_heatmap.py /path/to/genomic_distance.txt,程序会生成 /path/to/genomic_distance.png


安装依赖:

如果尚未安装 pandasseabornmatplotlib,可以使用以下命令安装:

pip install pandas seaborn matplotlib

示例热图:

假设输入文件为上述 genomic_distance.txt,程序会生成如下热图:

X轴和Y轴显示基因组标签(Genome1, Genome2, Genome3, Genome4)。

颜色从蓝色(低差异)到红色(高差异)表示基因组之间的差异。

每个单元格中显示具体的差异值。

这个程序非常适合用于基因组数据的分析和可视化,并且支持多种输出格式,输出文件与输入文件同路径!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容