飞道的博客

使用biopython可视化染色体和基因元件

369人阅读  评论(0)

欢迎关注”生信修炼手册”!

基因组结构元件的可视化有多种方式,比如IGV等基因组浏览器中以track为单位的展示形式,亦或以circos为代表的圈图形式,比如在细胞器基因组组装中,基因元件常用圈图形式展示,示例如下

在biopython中,通过BiolGraphics子模块可以对基因组结构进行可视化,支持线性和圈图两种可视化方式。其中,基因组结构信息存储在genebank格式的文件中,首先通过Bio.SeqIO读取结构信息,然后通过Bio.Graphics模块进行可视化。

以下列数据为例,先来看下可视化的用法

>https://www.ncbi.nlm.nih.gov/nuccore/NC_005816

首先是读取gb文件,代码如下


   
  1. >>> from reportlab.lib import colors
  2. >>> from reportlab.lib.units import cm
  3. >>> from Bio.Graphics import GenomeDiagram
  4. >>> from Bio import SeqIO
  5. >>> record = SeqIO.read( "sequence.gb", "genbank")

接下来提取gb文件中的feature信息,构建用于绘图的数据结构,代码如下


   
  1. >>> gd_diagram = GenomeDiagram.Diagram( "Yersinia pestis biovar Microtus plasmid pPCP1")
  2. >>> gd_track_for_features = gd_diagram.new_track( 1, name= "Annotated Features")
  3. >>> gd_feature_set = gd_track_for_features.new_set()
  4. >>> for feature in record.features:
  5. ...      if feature. type != "gene":
  6. ...          continue
  7. ...      if  len(gd_feature_set) % 2 == 0:
  8. ...         color = colors.blue
  9. ...      else:
  10. ...         color = colors.lightblue
  11. ...     gd_feature_set.add_feature(feature, color=color, label=True)

最后进行绘图即可,代码如下


   
  1. >>> gd_diagram.draw(format= "linear", orientation= "landscape", pagesize= 'A4',
  2. ... fragments= 4, start= 0, end= len(record))
  3. >>>
  4. >>> gd_diagram.write( "plasmid_linear.pdf", "PDF")

输出结果如下

对于圈图,只需要修改简单修改绘图的参数即可,代码如下


   
  1. >>> gd_diagram.draw(format= "circular", circular=True, pagesize=( 20*cm, 20*cm),
  2. ... start= 0, end= len(record), circle_core= 0.7)
  3. >>> gd_diagram.write( "plasmid_circular.pdf", "PDF")

输出结果如下

除了圈图之外,biopython还可以绘制染色体图。最简单的绘图,只需要提供染色体名称和对应的长度即可,代码如下


   
  1. >>> entries = [( "Chr I", 30432563),
  2. ...            ( "Chr II", 19705359),
  3. ...            ( "Chr III", 23470805),
  4. ...            ( "Chr IV", 18585042),
  5. ...            ( "Chr V", 26992728)]
  6. >>>
  7. >>> max_len = 30432563
  8. >>> telomere_length = 1000000
  9. >>>
  10. >>> chr_diagram = BasicChromosome.Organism()
  11. >>> chr_diagram.page_size = ( 29.7*cm, 21*cm) #A4 landscape
  12. >>> for name, length in entries:
  13. ...     cur_chromosome = BasicChromosome.Chromosome(name)
  14. ...     cur_chromosome.scale_num = max_len + 2 * telomere_length
  15. ...     start = BasicChromosome.TelomereSegment()
  16. ...     start.scale = telomere_length
  17. ...     cur_chromosome.add(start)
  18. ...     body = BasicChromosome.ChromosomeSegment()
  19. ...     body.scale = length
  20. ...     cur_chromosome.add(body)
  21. ...     end = BasicChromosome.TelomereSegment(inverted=True)
  22. ...     end.scale = telomere_length
  23. ...     cur_chromosome.add(end)
  24. ...     chr_diagram.add(cur_chromosome)
  25. ...
  26. >>> chr_diagram.draw( "simple_chrom.pdf", "Arabidopsis thaliana")

输出结果如下

更进一步,可以在染色体上添加注释,标记基因组结构元件在染色体上的分布,代码如下


   
  1. >>> chr_diagram = BasicChromosome.Organism()
  2. >>> chr_diagram.page_size = ( 29.7 * cm, 21 * cm) # A4 landscape
  3. >>>
  4. >>> entries = [
  5. ...     ( "Chr I", "NC_003070.gbk"),
  6. ...     ( "Chr II", "NC_003071.gbk"),
  7. ...     ( "Chr III", "NC_003074.gbk"),
  8. ...     ( "Chr IV", "NC_003075.gbk"),
  9. ...     ( "Chr V", "NC_003076.gbk"),
  10. ... ]
  11. >>>
  12. >>> max_len = 30432563
  13. >>> telomere_length = 1000000
  14. >>>
  15. >>> chr_diagram = BasicChromosome.Organism()
  16. >>> chr_diagram.page_size = ( 29.7 * cm, 21 * cm)
  17. >>> for index, (name, filename) in enumerate(entries):
  18. ...     record = SeqIO.read(filename, "genbank")
  19. ...     length = len(record)
  20. ...     features = [f for f in record.features if f. type == "tRNA"]
  21. ...      for f in features:
  22. ...         f.qualifiers[ "color"] = [index + 2]
  23. ...     cur_chromosome = BasicChromosome.Chromosome(name)
  24. ...     cur_chromosome.scale_num = max_len + 2 * telomere_length
  25. ...     start = BasicChromosome.TelomereSegment()
  26. ...     start.scale = telomere_length
  27. ...     cur_chromosome.add(start)
  28. ...     body = BasicChromosome.AnnotatedChromosomeSegment(length, features)
  29. ...     body.scale = length
  30. ...     cur_chromosome.add(body)
  31. ...     end = BasicChromosome.TelomereSegment(inverted=True)
  32. ...     end.scale = telomere_length
  33. ...     cur_chromosome.add(end)
  34. ...     chr_diagram.add(cur_chromosome)
  35. ...
  36. >>>
  37. >>> chr_diagram.draw( "tRNA_chrom.pdf", "Arabidopsis thaliana")

输出结果如下

相比circos,biopython的track可能没有那么多种丰富的表现形式,但是也有其独特性。更重要的是,在染色体上标记特定元件的这种可视化方式,应用非常广泛,snp, ssr, cnv, genge等等都可以进行标记。

·end·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

  更多精彩

  写在最后

转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。

扫描下方二维码,关注我们,解锁更多精彩内容!

一个只分享干货的

生信公众号


转载:https://blog.csdn.net/weixin_43569478/article/details/112301283
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场