python-读取测序数据的ABI文件并输出png格式峰图

本地环境:win10,Python 3.9.13,Biopython 1.8.2,matplotlib 3.5.2


参考:
matplotlib.pyplot.arrow — Matplotlib 3.9.1 documentation
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.arrow.html

matplotlib之pyplot模块——向子图添加箭头(arrow())_在matplotlib中哪个函数可以在图表中添加箭头-CSDN博客
https://blog.csdn.net/mighty13/article/details/117189164


前言

之前写过:

  1. python-读取abi文件并绘制峰图_python abi如何获取-CSDN博客
    https://blog.csdn.net/pxy7896/article/details/120562689

  2. C#-读取测序数据的ABI文件并绘制svg格式峰图_dna abi文件 规范-CSDN博客
    https://blog.csdn.net/pxy7896/article/details/140798619

因为需要python版(🙄谁叫我要跟不同的同事对接),所以我又用biopython和matplotlib另外写了一版。这版的代码更短,实现也更为简单。

仍旧是在1的基础上修改,主要是美化了图像。

下文会默认读者已安装biopython和matplotlib。

实现效果

只截取了一部分,如下图所示:(在看图软件里截取的🙂)
在这里插入图片描述

解决思路

  1. 解析文件就用biopython包,主要是SeqIO.parse
  2. 完成数据提取后,仍然按前言2中思路分析图像里的元素。这里需要考虑的重点是箭头和文字的绘制:
    2.1 对于箭头,使用matplotlib.pyplot.arrow进行绘制
    2.2 对于文字,使用matplotlib.pyplot.text进行绘制

实现要点

下文约定:

from Bio import SeqIO
import matplotlib.pyplot as plt

如何提取序列数值

# 检查文件格式
raw = open(file_name, errors='ignore').read()
if file_name[-3:] != 'ab1' or raw[:4] != 'ABIF':
    return "wrong file format"

# 读取数据
for record in SeqIO.parse(file_name, "abi"):
	seq = record.seq
	anno = record.annotations
	abif_raw = anno["abif_raw"]
    seqOrder = str(abif_raw["FWO_1"])[2:-1]

这里的seqOrder是四个字符,比如GATC这样,指明的是abif_raw["DATA9"]~abif_raw["DATA12"]分别是哪个碱基的。现在就是指abif_raw["DATA9"]G,以此类推。

对于basecall,用的是:abif_raw["PLOC1"]。这个是字符数组,需要转成int

图像绘制要点

如何控制图像尺寸,并让图像占满整个画面

# 现在尺寸是1000x200,分辨率是100
fig, ax = plt.subplots(figsize=(10, 2), dpi=100)
# 不显示坐标轴
ax.axis('off')
# 调整子图的位置,让图像占满整个画面
fig.subplots_adjust(left=0, right=1, top=1, bottom=0)  

此时如果左右两侧还有空白,则需要设置xlim:

plt.xlim(0, 计算出的最大值) 

上下的同理。

如何设置字体、字号、粗细等效果

首先构件一个字典,存放信息:

font = {'family': 'courier new', 'color': 'green', 'weight': 'bold', 'size': 14}

绘制时:

plt.text(x, y, 字符, fontdict=font)

如何绘制箭头

参见本文最顶端的参考部分。

常用的参数有:

x:箭头的起始点的x坐标。

y:箭头的起始点的y坐标。

dx:箭头相对于起始点的水平偏移量。

dy:箭头相对于起始点的垂直偏移量。

head_width:箭头头部的宽度。

head_length:箭头头部的长度。

fc:箭头的填充颜色。

ec:箭头的边框颜色。

这里为了绘制向下的箭头,就需要让dx=0,dy是负数,这个负数其实就是箭头的高度。如果加上length_includes_head=True,那这个负数就是整个箭头的高度。

  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值