由於語法渲染問題而影響閱讀體驗, 請移步博客閱讀~
本文GitPage地址

Sanger Sequencing Plot (Biopython + Matplotlib)

Quick Start

  1. from Bio import SeqIO
  2. import matplotlib.pyplot as plt
  3. from collections import defaultdict
  4. ## Abi File
  5. abi_file = "D10.1.F.YP13033649.D10.S7695.ab1"
  6. record = SeqIO.read(abi_file, "abi")
  7. channels = ["DATA1", "DATA2", "DATA3", "DATA4"]
  8. trace = defaultdict(list)
  9. for c in channels:
  10. trace[c] = record.annotations["abif_raw"][c]
  11. plt.plot(trace["DATA2"], color="green" ,alpha=0.6, lw=0.2) # A
  12. plt.plot(trace["DATA4"], color="blue" ,alpha=0.6, lw=0.2) # C
  13. plt.plot(trace["DATA1"], color="black" ,alpha=0.6, lw=0.2) # G
  14. plt.plot(trace["DATA3"], color="red" ,alpha=0.6, lw=0.2) # T
  15. plt.title(record.annotations['abif_raw']['TUBE1'])
  16. plt.show()

用python 畫 abi文件, 測序結果 - 图1

Script for Results of 96-wells plate

abi_plot.py

  1. ##!/usr/bin/env python3
  2. import argparse
  3. parser = argparse.ArgumentParser()
  4. parser.add_argument('-i','-I','--input') #输入文件
  5. parser.add_argument('-o','-O','--output', default="out.png") #输入文件
  6. ##获取参数
  7. args = parser.parse_args()
  8. INPUT = args.input
  9. OUTPUT = args.output
  10. #####
  11. #####
  12. import os
  13. import matplotlib as mpl
  14. import matplotlib.pyplot as plt
  15. from Bio import SeqIO
  16. from collections import defaultdict
  17. def raw_plot(INPUT):
  18. record = SeqIO.read(INPUT, "abi")
  19. channels = ["DATA1", "DATA2", "DATA3", "DATA4"]
  20. trace = defaultdict(list)
  21. for c in channels:
  22. trace[c] = record.annotations["abif_raw"][c]
  23. plt.plot(trace["DATA2"], color="green" ,alpha=0.6, lw=0.2) # A
  24. plt.plot(trace["DATA4"], color="blue" ,alpha=0.6, lw=0.2) # C
  25. plt.plot(trace["DATA1"], color="black" ,alpha=0.6, lw=0.2) # G
  26. plt.plot(trace["DATA3"], color="red" ,alpha=0.6, lw=0.2) # T
  27. plt.title(record.annotations['abif_raw']['TUBE1'])
  28. #plt.show()
  29. Cmd = "ls "+ str(INPUT)
  30. LIST = os.popen(Cmd).read().split("\n")[:-1]
  31. print(LIST)
  32. plt.figure(figsize=(14*3, 8*3))
  33. plt.ion()
  34. for i in range(96):
  35. plt.subplot(8,12,i+1)
  36. abi = INPUT+"/"+LIST[i]
  37. print(abi)
  38. raw_plot(abi)
  39. plt.show()
  40. plt.savefig(OUTPUT)

Usage:

  1. abi_plot.py -i 96Well_Result

用python 畫 abi文件, 測序結果 - 图2

Box plot

It is useful when all abi files are plasmid or long sequencing result.

Box plot

  1. def raw_box_plot(INPUT):
  2. record = SeqIO.read(INPUT, "abi")
  3. channels = ["DATA1", "DATA2", "DATA3", "DATA4"]
  4. trace = []
  5. for c in channels:
  6. trace += record.annotations["abif_raw"][c][2500:15000]
  7. plt.boxplot(trace) # A
  8. plt.axis([0,2,0,600])
  9. plt.title(record.annotations['abif_raw']['TUBE1'])
  10. plt.show()
  1. import os
  2. import matplotlib as mpl
  3. import matplotlib.pyplot as plt
  4. from Bio import SeqIO
  5. INPUT = "96Well_Result"
  6. Cmd = "ls "+ str(INPUT)
  7. LIST = os.popen(Cmd).read().split("\n")[:-1]
  8. trace = []
  9. for i in range(96):
  10. abi = INPUT+"/"+LIST[i]
  11. record = SeqIO.read(abi, "abi")
  12. channels = ["DATA1", "DATA2", "DATA3", "DATA4"]
  13. for c in channels:
  14. trace += record.annotations["abif_raw"][c][2500:15000]
  15. trace2 = []
  16. for i in range(18):
  17. abi = INPUT+"/"+LIST[i]
  18. record = SeqIO.read(abi, "abi")
  19. channels = ["DATA1", "DATA2", "DATA3", "DATA4"]
  20. for c in channels:
  21. trace2 += record.annotations["abif_raw"][c][2500:15000]
  22. trace3 = []
  23. for i in range(18,96):
  24. abi = INPUT+"/"+LIST[i]
  25. record = SeqIO.read(abi, "abi")
  26. channels = ["DATA1", "DATA2", "DATA3", "DATA4"]
  27. for c in channels:
  28. trace3 += record.annotations["abif_raw"][c][2500:15000]
  29. plt.boxplot([trace, trace2, trace3])
  30. plt.axis([0,4,0,600])

Enjoy~

本文由Python腳本GitHub/語雀自動更新

由於語法渲染問題而影響閱讀體驗, 請移步博客閱讀~
本文GitPage地址

GitHub: Karobben
Blog:Karobben
BiliBili:史上最不正經的生物狗