You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python绘制Needleman-Wunsch全局比对:网格箭头+热图实现方法

实现带箭头路径的全局比对热图

可以同时实现热图展示得分和箭头标记比对路径,核心是理清热图单元格的坐标映射,结合比对路径数据绘制箭头。以下是具体实现步骤和代码:

步骤1:准备数据(得分矩阵与比对路径)

先构建得分矩阵(可通过全局比对算法如Needleman-Wunsch生成),同时整理出最优比对的路径坐标:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 示例序列
seq1 = "ATCG"
seq2 = "AGCT"

# 模拟全局比对得分矩阵(实际可替换为真实DP计算结果)
score_matrix = np.array([
    [0, -1, -2, -3],
    [-1, 1, 0, -1],
    [-2, 0, 2, 1],
    [-3, -1, 1, 3]
])

# 模拟最优比对路径的坐标(格式:(行索引, 列索引),对应seq1和seq2的位置映射)
path = [(0,0), (1,0), (1,2), (2,1), (3,3)]

步骤2:绘制得分热图

用seaborn heatmap渲染得分矩阵,设置序列字符为坐标轴标签:

plt.figure(figsize=(8, 6))
# 绘制热图,显示得分数值,配置颜色映射
ax = sns.heatmap(score_matrix, annot=True, cmap="YlGnBu", 
                 xticklabels=list(seq2), yticklabels=list(seq1),
                 cbar=True)

# 反转y轴,让序列顺序与热图行方向一致
ax.invert_yaxis()

步骤3:计算坐标并绘制箭头

热图每个单元格的中心坐标为 (列索引+0.5, 行索引+0.5),基于此遍历路径绘制箭头:

# 遍历路径中的连续点对,绘制箭头连接
for i in range(len(path)-1):
    y1, x1 = path[i]
    y2, x2 = path[i+1]
    
    # 转换为单元格中心坐标
    start_x = x1 + 0.5
    start_y = y1 + 0.5
    end_x = x2 + 0.5
    end_y = y2 + 0.5
    
    # 绘制箭头,调整样式参数适配热图
    plt.arrow(start_x, start_y, end_x - start_x, end_y - start_y,
              head_width=0.15, head_length=0.15, fc='darkred', ec='darkred', linewidth=2)

# 设置图表标题与标签
plt.title("Global Alignment with Score Heatmap")
plt.xlabel("Sequence 2")
plt.ylabel("Sequence 1")

plt.tight_layout()
plt.show()

关键细节

  • 坐标映射:热图的单元格索引(行对应seq1,列对应seq2)需转换为中心坐标,才能让箭头准确指向单元格中间。
  • 路径生成:实际场景中,路径需从全局比对的回溯步骤获取,比如Needleman-Wunsch算法的回溯链。
  • 样式优化:可通过调整plt.arrow的head_width、color等参数自定义箭头样式,批量绘制时用plt.quiver效率更高。

内容的提问来源于stack exchange,提问作者Kactaceapengu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:42:36