写一个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是可选参数,表示输出文件格式(支持png、svg、pdf、jpeg),默认为png。
2. 读取文件:
使用
pandas.read_csv读取文件,并指定分隔符为Tab键(sep='\t')。设置
index_col=0将第一列作为行标签。文件的第一行应为列标签(基因组名称),第一列应为行标签(基因组名称)。
3. 绘制热图:
使用
seaborn.heatmap绘制热图。annot=True表示在热图上显示数值。cmap='coolwarm'指定颜色映射,适合表示基因组差异。fmt='.2f'表示数值以两位小数的形式显示。
4. 保存热图:
使用
plt.savefig将热图保存为指定格式。支持输出格式包括
png、svg、pdf、jpeg。输出文件与输入文件同路径,文件名为输入文件名(除去扩展名),扩展名由
--format参数指定。
5. 获取输入文件路径和文件名:
使用
os.path.dirname获取输入文件所在目录。使用
os.path.splitext和os.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。
安装依赖:
如果尚未安装 pandas、seaborn 和 matplotlib,可以使用以下命令安装:
pip install pandas seaborn matplotlib
示例热图:
假设输入文件为上述 genomic_distance.txt,程序会生成如下热图:
X轴和Y轴显示基因组标签(Genome1, Genome2, Genome3, Genome4)。
颜色从蓝色(低差异)到红色(高差异)表示基因组之间的差异。
每个单元格中显示具体的差异值。
这个程序非常适合用于基因组数据的分析和可视化,并且支持多种输出格式,输出文件与输入文件同路径!