本地环境: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
目录
- 前言
- 实现效果
- 解决思路
- 实现要点
- 如何提取序列数值
- 图像绘制要点
- 如何控制图像尺寸,并让图像占满整个画面
- 如何设置字体、字号、粗细等效果
- 如何绘制箭头
前言
之前写过:
-
python-读取abi文件并绘制峰图_python abi如何获取-CSDN博客
https://blog.csdn.net/pxy7896/article/details/120562689 -
C#-读取测序数据的ABI文件并绘制svg格式峰图_dna abi文件 规范-CSDN博客
https://blog.csdn.net/pxy7896/article/details/140798619
因为需要python版(🙄谁叫我要跟不同的同事对接),所以我又用biopython和matplotlib另外写了一版。这版的代码更短,实现也更为简单。
仍旧是在1的基础上修改,主要是美化了图像。
下文会默认读者已安装biopython和matplotlib。
实现效果
只截取了一部分,如下图所示:(在看图软件里截取的🙂)
解决思路
- 解析文件就用
biopython
包,主要是SeqIO.parse
- 完成数据提取后,仍然按前言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
,那这个负数就是整个箭头的高度。