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

如何规范实现DNA序列可视化的分色排版(Matplotlib)?

DNA序列组装可视化的坐标对齐规范实现方法

我正在尝试可视化DNA序列及其组装过程,已通过代码生成对应图像(DNA片段组装示意图)。当前需手动调试x坐标才能让不同颜色的序列对齐,操作难度大,请问是否有规范的实现方法?感谢您的帮助!

原可视化代码

from revcomp import revcomp
import matplotlib.pyplot as plt

sequence = "ATGCGTGGACGTG"
complement = revcomp(sequence, reverse=False, complement=True)

seqlist_1 = ["5' ", sequence, " 3'"]
hydrobonds_1 = ["   ", len(sequence)*"|"]
complist_1 = ["3' ", complement, " 5'"]

# 模拟5'核酸外切酶消化序列
digest_1 = ["".join(complist_1)[0:10], 7*" ", "5'"]

sequence = "GACGTGAGTGTGACGTGACCCGGTTTT"
complement = revcomp(sequence, reverse=False, complement=True)

seqlist = ["5' ", sequence, " 3'"]
hydrobonds = ["   ", len(sequence)*"|"]
complist = ["3' ", complement, " 5'"]

plt.plot()
plt.text(-0.04, 0.04, "".join(seqlist_1), color = "blue")
plt.text(-0.04, 0.035, "".join(complist_1)[0:10], color = "blue")
plt.text(-0.0235, 0.035, "".join(complist_1)[10:], color = "red")
plt.text(0.025, 0.04, "".join(seqlist)[9:], color = "green")
plt.text(0.01, 0.04, "".join(seqlist)[0:9], color = "red")
plt.text(0.01, 0.035, "".join(complist), color = "green")

plt.text(-0.04, 0.02, "".join(seqlist_1), color = "blue")
plt.text(-0.04, 0.015, "".join(complist_1)[0:10], color = "blue")
plt.text(0.025, 0.02, "".join(seqlist)[9:], color = "green")
plt.text(0.01, 0.015, "".join(complist), color = "green")

plt.text(-0.04, -0.01, "".join(seqlist_1)[:-2], color = "blue")
plt.text(-0.012, -0.01, "".join(seqlist)[9:], color = "green")
plt.text(-0.04, -0.015, "".join(complist_1)[0:10], color = "blue")
plt.text(-0.025, -0.015, "".join(complist)[2:], color = "green")

plt.text(0, 0.025, "5' exonuclease")
plt.text(0, 0, "Gibson assembly")

plt.axis('off')
plt.show()

依赖的revcomp函数

def revcomp(dna, reverse=True, complement=True):
        """ 输入DNA序列,返回其互补链;若仅需互补而非反向互补,将reverse设为False """
        bases = 'ATGCatgcWSRYMKwsrymkHBVDhbvdNnTACGTACGWSYRKMWSYRKMDVBHDVBHNN'
        complement_dict = {} # 构建碱基与互补碱基的映射字典
        for i in range(30):
                complement_dict[bases[i]] = bases[i+30]
        if reverse: # 默认执行反向操作
                dna = reversed(dna)
                result_as_list = None 
        if complement: # 默认执行互补操作
                result_as_list = [complement_dict[base] for base in dna]
        else:
                result_as_list = [base for base in dna]
        return ''.join(result_as_list)

规范实现方法

手动调试坐标效率极低,推荐两种可行方案解决对齐问题:

方案1:Matplotlib自动坐标计算

利用Matplotlib的文本宽度计算功能,动态推导每个序列片段的起始位置,确保碱基精准对齐,核心步骤:

  1. 预先计算单个字符的显示宽度(基于使用的字体和字号)
  2. 以基准序列为参照,根据序列重叠长度计算后续片段的x偏移量
  3. 封装逻辑批量处理不同序列和颜色,避免手动硬编码坐标

示例代码片段:

import matplotlib.pyplot as plt

def get_single_char_width(ax, sample_text="ATCG", fontsize=10):
    # 计算单个字符的平均显示宽度
    temp_text = ax.text(0, 0, sample_text, fontsize=fontsize)
    ax.figure.canvas.draw()
    bbox = temp_text.get_window_extent()
    char_width = bbox.width / len(sample_text)
    temp_text.remove()
    return char_width

# 初始化画布
fig, ax = plt.subplots()
ax.axis('off')
fontsize = 10
char_width = get_single_char_width(ax, fontsize=fontsize)

# 绘制第一条完整序列(基准)
base_seq = "".join(seqlist_1)
x_base = 0
y_top = 0.04
ax.text(x_base, y_top, base_seq, color="blue", fontsize=fontsize)

# 绘制互补链前10个字符(与基准序列对齐)
comp_part1 = "".join(complist_1)[0:10]
ax.text(x_base, y_top - 0.005, comp_part1, color="blue", fontsize=fontsize)

# 绘制互补链剩余部分:起始位置 = 基准起始 + 10个字符宽度
comp_part2 = "".join(complist_1)[10:]
x_comp_part2 = x_base + 10 * char_width
ax.text(x_comp_part2, y_top - 0.005, comp_part2, color="red", fontsize=fontsize)

# 同理处理其他重叠序列,根据重叠长度计算x偏移
seq_part1 = "".join(seqlist)[0:9]
x_seq_part1 = x_comp_part2 - 9 * char_width
ax.text(x_seq_part1, y_top, seq_part1, color="red", fontsize=fontsize)

seq_part2 = "".join(seqlist)[9:]
x_seq_part2 = x_seq_part1 + 9 * char_width
ax.text(x_seq_part2, y_top, seq_part2, color="green", fontsize=fontsize)

plt.show()

方案2:使用专用可视化工具

如果Matplotlib文本排版不够便捷,可选择更专业的工具:

  • DNA专用可视化库:比如pygenomeviz,专门针对基因组组装、序列比对场景设计,内置对齐逻辑,无需手动调坐标
  • 纯文本排版转图像:先在文本环境中用空格、字符拼接出对齐的组装示意图,再转成图像,对齐逻辑更直观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:37:13