Bioperl:把Genbank格式的序列转换为基因结构图


下面是一个Bioperl的小程序,可以把Genbank格式的序列转换为png图片-基因结构图,显示序列的长度,CDS区,exon区,STS区等。简单地讲就是把该序列的Genbank格式里的信息用图片表示。 这个程序来源于网络。

下面举个例子,以NM_172587为例。

NM_172587的Genbank格式下面的链接,另存为文件名’NM_172587.gb’:

http://www.liucheng.name/entrez/entrez.php?acc=NM_172587&db=nucleotide&format=gb&start=Submit

下面是Bioperl脚本:

存为文件名:graphics.pl

#!/usr/bin/perl -w

use Bio::Graphics;
use Bio::SeqIO;
use Bio::SeqFeature::Generic;
my $file = shift
    or die "provide a sequence file as the argument";
my $io = Bio::SeqIO->new(-file=>$file)
    or die "couldn't create Bio::SeqIO";
my $seq = $io->next_seq
    or die "couldn't find a sequence in the file";
my @features = $seq->all_SeqFeatures;
# sort features by their primary tags
my %sorted_features;
for my $f (@features) {
    my $tag = $f->primary_tag;
    push @{$sorted_features{$tag}},$f;
}
my $panel = Bio::Graphics::Panel->new(
-length => $seq->length,
-key_style => 'between',
-width => 800,
-pad_left => 10,
          -pad_right => 10);
$panel->add_track(arrow =>
Bio::SeqFeature::Generic->new(-start => 1,
-end => $seq->length),
-bump => 0,
-double=>1,
    -tick => 2);
$panel->add_track(generic =>
Bio::SeqFeature::Generic->new(-start => 1,
-end => $seq->length,
-bgcolor => 'blue',
         -label => 1));
# general case
my @colors = qw(cyan orange blue purple green
  chartreuse magenta yellow aqua);
    my $idx = 0;
    for my $tag (sort keys %sorted_features) {
        my $features = $sorted_features{$tag};
$panel->add_track($features,
-glyph => 'generic',
-bgcolor => $colors[$idx++ % @colors],
-fgcolor => 'black',
-font2color => 'red',
-key => "${tag}s",
-bump => +1,
-height => 8,
-label => 1,
-description => 1);
    }
 print $panel->png;

 

用法:

perl graphics.pl NM_172587.gb >1.png

 

结果就生成了一个名为1.png的图片,如下图

graphics

当然了,用这个脚本首先你的电脑已经装好了Bioperl。这个就不多讲了~


16条回应:“Bioperl:把Genbank格式的序列转换为基因结构图”

  1. 我用你的方法试了一遍,可是只是生成了一个6.58kB大小的名为1.png的文件,文件打开后没有任何图片,你能不能帮我分析下原因..
    谢谢~!

  2. 还有这个:
    Subroutine new redefined at E:/Program Files/Perl/site/lib/Bio\Location\Simple.pm line 80, line 73.
    Subroutine start redefined at E:/Program Files/Perl/site/lib/Bio\Location\Simple.pm line 102, line 73.
    Subroutine end redefined at E:/Program Files/Perl/site/lib/Bio\Location\Simple.pm line 128, line 73.
    Subroutine length redefined at E:/Program Files/Perl/site/lib/Bio\Location\Simple.pm line 165, line 73.
    Subroutine location_type redefined at E:/Program Files/Perl/site/lib/Bio\Location\Simple.pm line 256, line 73.
    Subroutine to_FTstring redefined at E:/Program Files/Perl/site/lib/Bio\Location\Simple.pm line 303, line 73.
    Subroutine trunc redefined at E:/Program Files/Perl/site/lib/Bio\Location\Simple.pm line 334, line 73.
    Subroutine new redefined at E:/Program Files/Perl/site/lib/Bio\Location\Fuzzy.pm line 134, line 89.
    Subroutine location_type redefined at E:/Program Files/Perl/site/lib/Bio\Location\Fuzzy.pm line 161, line 89.
    Subroutine start redefined at E:/Program Files/Perl/site/lib/Bio\Location\Fuzzy.pm line 223, line 89.
    Subroutine end redefined at E:/Program Files/Perl/site/lib/Bio\Location\Fuzzy.pm line 250, line 89.
    Subroutine min_start redefined at E:/Program Files/Perl/site/lib/Bio\Location\Fuzzy.pm line 277, line 89.
    Subroutine max_start redefined at E:/Program Files/Perl/site/lib/Bio\Location\Fuzzy.pm line 296, line 89.
    Subroutine start_pos_type redefined at E:/Program Files/Perl/site/lib/Bio\Location\Fuzzy.pm line 316, line 89.
    Subroutine min_end redefined at E:/Program Files/Perl/site/lib/Bio\Location\Fuzzy.pm line 346, line 89.
    Subroutine max_end redefined at E:/Program Files/Perl/site/lib/Bio\Location\Fuzzy.pm line 365, line 89.
    Subroutine end_pos_type redefined at E:/Program Files/Perl/site/lib/Bio\Location\Fuzzy.pm line 385, line 89.
    Subroutine to_FTstring redefined at E:/Program Files/Perl/site/lib/Bio\Location\Fuzzy.pm line 456, line 89.
    Subroutine _fuzzypointdecode redefined at E:/Program Files/Perl/site/lib/Bio\Location\Fuzzy.pm line 557, line 89.

    • 没有装好Bioperl吧~
      use Bio::Graphics;
      use Bio::SeqIO;
      use Bio::SeqFeature::Generic;
      确定都有了?
      perldoc 看看

    • 我也遇到这个错误,不知道现在如何解决。
      安装bioperl颇为坎坷,能获取数据了,可惜没有biographics模块,图像显示不出来……

      • 安装bioperl的确是难啊。试着多安装几次呗。我有空再装装看。再玩玩。 [ok]

        • 嗯,使用开源的这些免费的资源很多时候是需要付出代价的。
          winxp下我已经安装不下10次bioperl……
          但biographic还没有什么效果……
          试试linux。

  3. 你好
    我的bioperl一直安装不好,按照bioperlchina网站上面说的那样做的,但是不知道是因为网络的原因还是其他原因,装不好。
    我初学perl,很过东西还不清楚,所以能不能麻烦告诉我怎么解决这些问题
    我现在使用的平台是Windows和Cygwin
    谢谢

  4. 你好,请问下你安装的perl是什么版本的啊,好像Bio::Graphics 模块在1.6版本以后就单独列出来了呀,这个怎么安装呢??

  5. 您好,我的问题如1楼,运行程序没问题,但是生成的png里面啥也没有。我用perldoc查看了,所需的模块全有,不知道问题出在哪里?麻烦博主帮忙分析一下。

    • 确定是用上面的例子??
      perl graphics.pl NM_172587.gb >1.png
      这句只是个例子。要注意路径。~ [衰]
      下次请到yunbio.com

  6. 你好!经常看你的博客获益非浅啊!我对perl 略懂,对bioperl就比较白痴了,现在有个问题想请柳大侠帮助:我想画一个转录本的剪接方式的图,就是一个基因如果有三个转录本,我就把三个转录本的剪接方式画在下面,折腾了好久都不行,主要是对程序不太懂,不会改,希望博主不吝赐教,谢谢

  7. 正想用这样的基因结构图啊!可我怎么画不出来?这个例子跑出的1.png只有10.7K,打开没图片,啥也没有。
    use Bio::Graphics;
    use Bio::SeqIO;
    use Bio::SeqFeature::Generic;。
    这三个模块都装好的。。BioPerl也可以用的。

    柳大侠能帮忙找找原因吗?