包括基因组图的图形

Bio.Graphics module depends on the third party Python library ReportLab .尽管ReportLab专注于生成PDF文件,但它还可以创建封装的PostScript(PS)和(JPEG)文件。除了这些基于载体的图像之外,还提供了某些进一步的依赖关系,例如 Python Imaging Library (PIL) 安装后,ReportLab还可以输出位图图像(包括JPEG、PNG、GIF、BMP和PICT格式)。

GenomeDiagram

介绍

Bio.Graphics.GenomeDiagram 模块被添加到Biopython 1.50中,之前作为独立的Python模块依赖于Biopython。Pritchard等人(2006年)在生物信息学杂志出版物中描述了基因组图。 [Pritchard2006], 其中包括一些示例图像。这里有旧手册的PDF副本,http://biopython.org/DIST/docs/GenomeDiagram/userguide.pdf,其中有更多示例。

顾名思义,GenomeDiagram旨在绘制整个基因组,特别是原核基因组,可以作为线性图(可选地分解成片段以更好地适应)或作为圆环图。看看Toth中的图2 et al. (2006) [Toth2006] 作为一个很好的例子。事实证明,它也非常适合绘制较小基因组(例如噬菌体、载体或线粒体)的相当详细的数字,例如,参见Van der Auwera中的图1和2 et al. (2009) [Vanderauwera2009] (显示带有额外的手动编辑)。

如果您将基因组加载为 SeqRecord 包含大量 SeqFeature 对象-例如从ESB文件加载(请参阅章节  顺序注释对象 和  序列输入/输出 ).

图表、轨迹、功能集和功能

GenomeDiagram使用一组嵌套的对象。在顶层,您有一个图表对象,代表沿着水平轴(或圆)的序列(或序列区域)。图表可以包含一个或多个轨道,垂直堆叠(或在圆形图表上呈放射状)。这些通常都具有相同的长度并代表相同的序列区域。您可以使用一个轨道来显示基因位置,另一个轨道来显示调节区域,第三个轨道来显示GC百分比。

最常用的曲目类型将包含捆绑在功能集中的功能。您可以选择对所有CDS功能使用一个功能集,并对TLR功能使用另一个功能集。这不是必需的--它们可以全部放入同一个特征集中,但它可以更容易地更新仅选定特征的属性(例如将所有TLR特征变成红色)。

建立完整图表有两种主要方法。首先,采用自上而下的方法,创建一个图表对象,然后使用其方法添加轨迹,并使用轨迹方法添加要素集,并使用其方法添加要素。其次,您可以单独创建各个对象(以适合您的代码的任何顺序),然后将它们组合起来。

自上而下的例子

我们将从 SeqRecord object read in from a GenBank file (see Chapter 序列输入/输出). This example uses the pPCP1 plasmid from Yersinia pestis biovar Microtus, the file is included with the Biopython unit tests under the GenBank folder, or online NC_005816.gb 来自我们的网站。

from reportlab.lib import colors
from reportlab.lib.units import cm
from Bio.Graphics import GenomeDiagram
from Bio import SeqIO

record = SeqIO.read("NC_005816.gb", "genbank")

我们使用自上而下的方法,因此在加载序列后,我们接下来创建一个空图表,然后添加一个(空)轨道,并向其中添加一个(空)特征集:

gd_diagram = GenomeDiagram.Diagram("Yersinia pestis biovar Microtus plasmid pPCP1")
gd_track_for_features = gd_diagram.new_track(1, name="Annotated Features")
gd_feature_set = gd_track_for_features.new_set()

现在有趣的部分--我们将每个基因 SeqFeature 我们的对象 SeqRecord ,并使用它在图表上生成特征。我们将把它们染成蓝色,在深蓝色和浅蓝色之间交替。

for feature in record.features:
    if feature.type != "gene":
        # Exclude this feature
        continue
    if len(gd_feature_set) % 2 == 0:
        color = colors.blue
    else:
        color = colors.lightblue
    gd_feature_set.add_feature(feature, color=color, label=True)

现在我们开始实际制作输出文件。这分为两个步骤,首先我们称之为 draw 方法,该方法使用ReportLab对象创建所有形状。然后我们称之为 write 将这些渲染为请求的文件格式的方法。请注意,您可以以多种文件格式输出:

gd_diagram.draw(
    format="linear",
    orientation="landscape",
    pagesize="A4",
    fragments=4,
    start=0,
    end=len(record),
)
gd_diagram.write("plasmid_linear.pdf", "PDF")
gd_diagram.write("plasmid_linear.eps", "EPS")
gd_diagram.write("plasmid_linear.svg", "SVG")

此外,只要您安装了依赖项,您还可以执行位图,例如:

gd_diagram.write("plasmid_linear.png", "PNG")

预期产量显示在 图 9 .

简单线性图 *Y. pestis biovar Microtus* pPCP 1。

图 9 简单线性图 Y. pestis biovar Microtus pPCP 1。

注意到 fragments 我们设置为四个参数控制基因组被分解成多少个片段。

如果您想绘制圆形图形,那么尝试一下:

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

预期产量显示在 图 10 .

简单的圆形图 *Y. pestis biovar Microtus* pPCP 1。

图 10 简单的圆形图 Y. pestis biovar Microtus pPCP 1。

这些数字并不是很令人兴奋,但我们才刚刚开始。

自下而上的例子

现在让我们生成完全相同的数字,但使用自下而上的方法。这意味着我们直接创建不同的对象(这几乎可以以任何顺序完成),然后将它们组合起来。

from reportlab.lib import colors
from reportlab.lib.units import cm
from Bio.Graphics import GenomeDiagram
from Bio import SeqIO

record = SeqIO.read("NC_005816.gb", "genbank")

# Create the feature set and its feature objects,
gd_feature_set = GenomeDiagram.FeatureSet()
for feature in record.features:
    if feature.type != "gene":
        # Exclude this feature
        continue
    if len(gd_feature_set) % 2 == 0:
        color = colors.blue
    else:
        color = colors.lightblue
    gd_feature_set.add_feature(feature, color=color, label=True)
# (this for loop is the same as in the previous example)

# Create a track, and a diagram
gd_track_for_features = GenomeDiagram.Track(name="Annotated Features")
gd_diagram = GenomeDiagram.Diagram("Yersinia pestis biovar Microtus plasmid pPCP1")

# Now have to glue the bits together...
gd_track_for_features.add_set(gd_feature_set)
gd_diagram.add_track(gd_track_for_features, 1)

您现在可以致电 drawwrite 方法与之前一样使用上面自上而下示例结尾的代码来生成线性或圆形图。数字应该相同。

没有SeqPerformance的功能

在上面的例子中,我们使用了 SeqRecord ' s SeqFeature 对象来构建我们的图表(另请参阅部分  特征、位置和位置对象 ).有时你不会有 SeqFeature 对象,但只是您要绘制的特征的坐标。你必须创造最小的 SeqFeature 对象,但这很简单:

from Bio.SeqFeature import SeqFeature, SimpleLocation

my_seq_feature = SeqFeature(SimpleLocation(50, 100, strand=+1))

对于链,使用 +1 对于向前链, -1 对于反向链,并且 None 对双方来说。这是一个简短的独立示例:

from Bio.SeqFeature import SeqFeature, SimpleLocation
from Bio.Graphics import GenomeDiagram
from reportlab.lib.units import cm

gdd = GenomeDiagram.Diagram("Test Diagram")
gdt_features = gdd.new_track(1, greytrack=False)
gds_features = gdt_features.new_set()

# Add three features to show the strand options,
feature = SeqFeature(SimpleLocation(25, 125, strand=+1))
gds_features.add_feature(feature, name="Forward", label=True)
feature = SeqFeature(SimpleLocation(150, 250, strand=None))
gds_features.add_feature(feature, name="Strandless", label=True)
feature = SeqFeature(SimpleLocation(275, 375, strand=-1))
gds_features.add_feature(feature, name="Reverse", label=True)

gdd.draw(format="linear", pagesize=(15 * cm, 4 * cm), fragments=1, start=0, end=400)
gdd.write("GD_labels_default.pdf", "pdf")

输出显示在 图 11 (in默认特征颜色,淡绿色)。

请注意,我们使用了 name 此处的参数指定这些功能的标题文本。接下来将更详细地讨论这一点。

功能说明

回想一下,我们使用了以下方法(其中 feature 是一个 SeqFeature 对象)向图表添加功能:

gd_feature_set.add_feature(feature, color=color, label=True)

在上面的例子中 SeqFeature 注释用于为功能选择合理的标题。默认情况下, SeqFeature 使用对象的限定符字典: gene , label , name , locus_tag ,而且 product .更简单地,您可以直接指定名称:

gd_feature_set.add_feature(feature, color=color, label=True, name="My Gene")

除了每个要素标签的标题文本外,您还可以选择字体、位置(默认为符号的开始,您还可以选择中间或结束)和方向(仅适用于线性图,默认为旋转 \(45\) 度):

# Large font, parallel with the track
gd_feature_set.add_feature(
    feature, label=True, color="green", label_size=25, label_angle=0
)

# Very small font, perpendicular to the track (towards it)
gd_feature_set.add_feature(
    feature,
    label=True,
    color="purple",
    label_position="end",
    label_size=4,
    label_angle=90,
)

# Small font, perpendicular to the track (away from it)
gd_feature_set.add_feature(
    feature,
    label=True,
    color="blue",
    label_position="middle",
    label_size=6,
    label_angle=-90,
)

将这三个片段中的每一个片段与上一节中的完整示例相结合,应该会得到类似于中的曲目的东西 图 11 .

显示标签选项的简单基因组图。

图 11 显示标签选项的简单基因组图。

顶部的淡绿色图显示默认标签设置(请参阅第节  没有SeqPerformance的功能 )而其余则显示标签大小、位置和方向的变化(请参阅第节  功能说明 ).

我们这里没有展示,但您也可以设置 label_color 控制标签的颜色(用于第部分  一个很好的例子 ).

您会注意到默认字体相当小-这是有道理的,因为您通常会在页面上绘制许多(小)特征,而不仅仅是此处显示的几个大特征。

特征标志

上面的例子都只是使用了该功能的默认标志,即普通框,这是GenomeDiagram上一次公开发布的独立版本中所提供的全部功能。当GenomeDiagram添加到Biopython 1.50时,就包含了箭头符号:

# Default uses a BOX sigil
gd_feature_set.add_feature(feature)

# You can make this explicit:
gd_feature_set.add_feature(feature, sigil="BOX")

# Or opt for an arrow:
gd_feature_set.add_feature(feature, sigil="ARROW")

Biopython 1.61又增加了三个印记,

# Box with corners cut off (making it an octagon)
gd_feature_set.add_feature(feature, sigil="OCTO")

# Box with jagged edges (useful for showing breaks in contains)
gd_feature_set.add_feature(feature, sigil="JAGGY")

# Arrow which spans the axis with strand used only for direction
gd_feature_set.add_feature(feature, sigil="BIGARROW")

这些显示在 图 12 .大多数图案都适合边界框(如默认BOX图案所示),对于正向或反向链,可以在轴上方或下方,或者对于无链特征,可以跨在轴上方(两倍高度)。BIGARROW徽标有所不同,总是横跨在从特征支架上取的方向的轴上。

显示不同印记的简单基因组图

图 12 简单的基因组图显示不同的印记。

箭头印记

我们在上一节中介绍了箭头印记。还有两个额外的选项来调整箭头的形状,首先是箭杆的厚度,以边界框高度的比例给出:

# Full height shafts, giving pointed boxes:
gd_feature_set.add_feature(feature, sigil="ARROW", color="brown", arrowshaft_height=1.0)
# Or, thin shafts:
gd_feature_set.add_feature(feature, sigil="ARROW", color="teal", arrowshaft_height=0.2)
# Or, very thin shafts:
gd_feature_set.add_feature(
    feature, sigil="ARROW", color="darkgreen", arrowshaft_height=0.1
)

结果示于 图 13 .

显示箭头轴选项的简单基因组图

图 13 简单的基因组图显示箭头轴选项。

其次,箭头的长度-作为边界框高度的比例给出(默认为 \(0.5\) ,或者 \(50\%\) ):

# Short arrow heads:
gd_feature_set.add_feature(feature, sigil="ARROW", color="blue", arrowhead_length=0.25)
# Or, longer arrow heads:
gd_feature_set.add_feature(feature, sigil="ARROW", color="orange", arrowhead_length=1)
# Or, very very long arrow heads (i.e. all head, no shaft, so triangles):
gd_feature_set.add_feature(feature, sigil="ARROW", color="red", arrowhead_length=10000)

结果示于 图 14 .

显示箭头选项的简单基因组图

图 14 简单的基因组图显示箭头选项。

Biopython 1.61添加了一个新的 BIGARROW 始终跨在轴上的符号,反向链指向左,否则指向右:

# A large arrow straddling the axis:
gd_feature_set.add_feature(feature, sigil="BIGARROW")

上面显示的所有轴和箭头选项 ARROW 标志可以用于 BIGARROW 也有印记。

一个很好的例子

现在让我们回到pPCP 1载体 Yersinia pestis biovar Microtus ,以及部分中使用的自上而下的方法  自上而下的例子 ,但是要利用我们现在讨论的符号选项。这一次,我们将使用箭头表示基因,并用无链特征(如普通框)覆盖它们,显示一些限制性消化位点的位置。

from reportlab.lib import colors
from reportlab.lib.units import cm
from Bio.Graphics import GenomeDiagram
from Bio import SeqIO
from Bio.SeqFeature import SeqFeature, SimpleLocation

record = SeqIO.read("NC_005816.gb", "genbank")

gd_diagram = GenomeDiagram.Diagram(record.id)
gd_track_for_features = gd_diagram.new_track(1, name="Annotated Features")
gd_feature_set = gd_track_for_features.new_set()

for feature in record.features:
    if feature.type != "gene":
        # Exclude this feature
        continue
    if len(gd_feature_set) % 2 == 0:
        color = colors.blue
    else:
        color = colors.lightblue
    gd_feature_set.add_feature(
        feature, sigil="ARROW", color=color, label=True, label_size=14, label_angle=0
    )

# I want to include some strandless features, so for an example
# will use EcoRI recognition sites etc.
for site, name, color in [
    ("GAATTC", "EcoRI", colors.green),
    ("CCCGGG", "SmaI", colors.orange),
    ("AAGCTT", "HindIII", colors.red),
    ("GGATCC", "BamHI", colors.purple),
]:
    index = 0
    while True:
        index = record.seq.find(site, start=index)
        if index == -1:
            break
        feature = SeqFeature(SimpleLocation(index, index + len(site)))
        gd_feature_set.add_feature(
            feature,
            color=color,
            name=name,
            label=True,
            label_size=10,
            label_color=color,
        )
        index += len(site)

gd_diagram.draw(format="linear", pagesize="A4", fragments=4, start=0, end=len(record))
gd_diagram.write("plasmid_linear_nice.pdf", "PDF")
gd_diagram.write("plasmid_linear_nice.eps", "EPS")
gd_diagram.write("plasmid_linear_nice.svg", "SVG")

gd_diagram.draw(
    format="circular",
    circular=True,
    pagesize=(20 * cm, 20 * cm),
    start=0,
    end=len(record),
    circle_core=0.5,
)
gd_diagram.write("plasmid_circular_nice.pdf", "PDF")
gd_diagram.write("plasmid_circular_nice.eps", "EPS")
gd_diagram.write("plasmid_circular_nice.svg", "SVG")

预期产出见图  显示选定限制性消化位点的载体pCPC 1线性图。 和  显示选定限制性消化位点的载体pCPC 1的圆形图。 .

显示选定限制性消化位点的载体线性图

图 15 显示选定限制性消化位点的载体pCPC 1线性图。

显示选定限制性消化位点的载体圆形图

图 16 显示选定限制性消化位点的载体pCPC 1的圆形图。

多个轨道

到目前为止,所有的例子都使用了一个轨道,但是你可以有多个轨道-例如在一个轨道上显示基因,在另一个轨道上显示重复区域。在这个例子中,我们将展示三个噬菌体基因组并排的比例,灵感来自Proux的图6 et al. (2002) [Proux2002]. 我们需要以下三种噬菌体的基因库文件:

  • NC_002703 - 乳球菌噬菌体Tuc2009,完整基因组 (\(38347\) BP)

  • AF323668 - 噬菌体bIL 285,完整基因组 (\(35538\) BP)

  • NC_003212Listeria innocua Clip 11262,完整基因组,我们仅关注整合的前噬菌5(长度相似)。

如果您愿意,您可以使用Deliverz下载这些内容,请参阅部分  EFetch:从Deliverz下载完整记录 了解更多详细信息。对于第三条记录,我们已经确定了噬菌体整合到基因组中的位置,并对记录进行切片以提取它(保留特征,请参阅第节  切片SeqRecord ),并且还必须反向互补以匹配前两个噬菌体的方向(再次保留特征,参见第节  反向补充SeqRecord对象 ):

from Bio import SeqIO

A_rec = SeqIO.read("NC_002703.gbk", "gb")
B_rec = SeqIO.read("AF323668.gbk", "gb")
C_rec = SeqIO.read("NC_003212.gbk", "gb")[2587879:2625807].reverse_complement(name=True)

我们正在模仿的人物使用不同的颜色来实现不同的基因功能。实现此目标的一种方法是编辑SEN文件以记录每个要素的颜色首选项-某种东西 Sanger’s Artemis editor 确实如此,GenomeDiagram应该理解这一点。然而,在这里,我们只对三个颜色列表进行硬编码。

请注意,SEN文件中的注释与Proux中显示的不完全匹配 et al. ,他们画了一些未注释的基因。

from reportlab.lib.colors import (
    red,
    grey,
    orange,
    green,
    brown,
    blue,
    lightblue,
    purple,
)

A_colors = (
    [red] * 5
    + [grey] * 7
    + [orange] * 2
    + [grey] * 2
    + [orange]
    + [grey] * 11
    + [green] * 4
    + [grey]
    + [green] * 2
    + [grey, green]
    + [brown] * 5
    + [blue] * 4
    + [lightblue] * 5
    + [grey, lightblue]
    + [purple] * 2
    + [grey]
)
B_colors = (
    [red] * 6
    + [grey] * 8
    + [orange] * 2
    + [grey]
    + [orange]
    + [grey] * 21
    + [green] * 5
    + [grey]
    + [brown] * 4
    + [blue] * 3
    + [lightblue] * 3
    + [grey] * 5
    + [purple] * 2
)
C_colors = (
    [grey] * 30
    + [green] * 5
    + [brown] * 4
    + [blue] * 2
    + [grey, blue]
    + [lightblue] * 2
    + [grey] * 5
)

现在来绘制它们--这次我们将三个轨道添加到图表中,并注意它们被赋予不同的开始/结束值以反映其不同的长度(这需要Biopython 1.59或更高版本)。

from Bio.Graphics import GenomeDiagram

name = "Proux Fig 6"
gd_diagram = GenomeDiagram.Diagram(name)
max_len = 0
for record, gene_colors in zip([A_rec, B_rec, C_rec], [A_colors, B_colors, C_colors]):
    max_len = max(max_len, len(record))
    gd_track_for_features = gd_diagram.new_track(
        1, name=record.name, greytrack=True, start=0, end=len(record)
    )
    gd_feature_set = gd_track_for_features.new_set()

    i = 0
    for feature in record.features:
        if feature.type != "gene":
            # Exclude this feature
            continue
        gd_feature_set.add_feature(
            feature,
            sigil="ARROW",
            color=gene_colors[i],
            label=True,
            name=str(i + 1),
            label_position="start",
            label_size=6,
            label_angle=0,
        )
        i += 1

gd_diagram.draw(format="linear", pagesize="A4", fragments=1, start=0, end=max_len)
gd_diagram.write(name + ".pdf", "PDF")
gd_diagram.write(name + ".eps", "EPS")
gd_diagram.write(name + ".svg", "SVG")

预期产量显示在 图 17 .

三轨三轨线性图

图 17 三个打印机的三个轨道的线性图。

这显示了乳球菌噬菌体Tuc2009(NC_002703)、噬菌体bIL 285(AF 323668)和来自的噬菌体5 Listeria innocua Clip 11262(NC_003212)(请参阅部分  多个轨道 ).

我确实想知道为什么在原始手稿中底部噬菌体中没有标记红色或橙色基因。另一个重要的一点是,这里显示的噬菌体具有不同的长度-这是因为它们都被绘制成相同的规模(它们 are 不同长度)。

与已发布的图的关键区别在于它们在相似蛋白质之间具有颜色编码的链接-这就是我们将在下一节中做的事情。

进一步的选项

您可以控制勾号来显示比例-毕竟每个图表都应该显示其单位以及灰色轨道标签的数量。

此外,我们只使用了 FeatureSet 迄今基因组图还有一个 GraphSet 其可用于显示线性图、条形图和热图(例如,显示平行于特征的轨道上的GC%图)。

此处尚未涵盖这些选项,因此目前我们将您推荐至 User Guide (PDF) 包含在GenomeDiagram的独立版本中(但请先阅读下一部分)和文档字符串中。

转换旧代码

如果您有使用GenomeDiagram独立版本编写的旧代码,并且您想将其切换到使用Biopython包含的新版本,那么您将必须进行一些更改-最重要的是对您的导入声明。

此外,旧版本的GenomeDiagram仅使用英国的颜色和中心拼写(colour和中心)。您需要更改为美国拼写,尽管几年来Biopython版本的GenomeDiagram支持这两种拼写。

例如,如果您曾经拥有:

from GenomeDiagram import GDFeatureSet, GDDiagram

gdd = GDDiagram("An example")
...

您可以像这样切换导入声明:

from Bio.Graphics.GenomeDiagram import FeatureSet as GDFeatureSet, Diagram as GDDiagram

gdd = GDDiagram("An example")
...

希望这就足够了。从长远来看,您可能想要切换到新名称,但您必须更改更多代码:

from Bio.Graphics.GenomeDiagram import FeatureSet, Diagram

gdd = Diagram("An example")
...

或者:

from Bio.Graphics import GenomeDiagram

gdd = GenomeDiagram.Diagram("An example")
...

如果您遇到困难,请在Biopython邮件列表中询问建议。一个问题是我们没有包含旧模块 GenomeDiagram.GDUtilities 呢这包括许多GC%相关功能,这些功能可能会合并到 Bio.SeqUtils 稍后

染色体

Bio.Graphics.BasicChromosome 模块允许绘制染色体。珍妮有一个例子 et al. (2012) [Jupe2012] (open访问)使用颜色来突出不同的基因家族。

简单染色体

这是一个非常简单的例子-我们将使用 Arabidopsis thaliana .

简单的染色体图 *Arabidopsis thaliana* .

图 20 简单的染色体图 Arabidopsis thaliana .

您可以跳过这一点,但首先我从NCBI的RTP网站ftp://ftp.ncbi.nlm.nih.gov/genomes/archive/old_refseq/Arabidopsis_thaliana/下载了五条测序染色体作为五个单独的FASTA文件,然后用 Bio.SeqIO 以找出它们的长度。您可以为此使用ESB文件(下一个示例使用这些文件来绘制特征),但如果您想要的只是长度,那么对整个染色体使用FASTA文件会更快:

from Bio import SeqIO

entries = [
    ("Chr I", "CHR_I/NC_003070.fna"),
    ("Chr II", "CHR_II/NC_003071.fna"),
    ("Chr III", "CHR_III/NC_003074.fna"),
    ("Chr IV", "CHR_IV/NC_003075.fna"),
    ("Chr V", "CHR_V/NC_003076.fna"),
]
for name, filename in entries:
    record = SeqIO.read(filename, "fasta")
    print(name, len(record))

这给出了五条染色体的长度,我们现在将在下面简短的演示中使用它 BasicChromosome 模块:

from reportlab.lib.units import cm
from Bio.Graphics import BasicChromosome

entries = [
    ("Chr I", 30432563),
    ("Chr II", 19705359),
    ("Chr III", 23470805),
    ("Chr IV", 18585042),
    ("Chr V", 26992728),
]

max_len = 30432563  # Could compute this from the entries dict
telomere_length = 1000000  # For illustration

chr_diagram = BasicChromosome.Organism()
chr_diagram.page_size = (29.7 * cm, 21 * cm)  # A4 landscape

for name, length in entries:
    cur_chromosome = BasicChromosome.Chromosome(name)
    # Set the scale to the MAXIMUM length plus the two telomeres in bp,
    # want the same scale used on all five chromosomes so they can be
    # compared to each other
    cur_chromosome.scale_num = max_len + 2 * telomere_length

    # Add an opening telomere
    start = BasicChromosome.TelomereSegment()
    start.scale = telomere_length
    cur_chromosome.add(start)

    # Add a body - using bp as the scale length here.
    body = BasicChromosome.ChromosomeSegment()
    body.scale = length
    cur_chromosome.add(body)

    # Add a closing telomere
    end = BasicChromosome.TelomereSegment(inverted=True)
    end.scale = telomere_length
    cur_chromosome.add(end)

    # This chromosome is done
    chr_diagram.add(cur_chromosome)

chr_diagram.draw("simple_chrom.pdf", "Arabidopsis thaliana")

这应该创建一个非常简单的PDF文件,如所示 图 20 .这个例子故意简短而甜蜜。下一个示例显示感兴趣要素的位置。

注释染色体

染色体图 *Arabidopsis thaliana* 显示TLR。

图 21 染色体图 Arabidopsis thaliana 显示TLR基因。

继续上一个例子,让我们还展示TLR基因。我们将通过解析五个人的基因库文件来获取他们的位置 Arabidopsis thaliana 染色体您需要从NCBI RTP网站ftp://ftp.ncbi.nlm.nih.gov/genomes/archive/old_refseq/Deliveropsis_thaliana/下载这些文件,并保留收件箱名称或编辑下面的路径:

from reportlab.lib.units import cm
from Bio import SeqIO
from Bio.Graphics import BasicChromosome

entries = [
    ("Chr I", "CHR_I/NC_003070.gbk"),
    ("Chr II", "CHR_II/NC_003071.gbk"),
    ("Chr III", "CHR_III/NC_003074.gbk"),
    ("Chr IV", "CHR_IV/NC_003075.gbk"),
    ("Chr V", "CHR_V/NC_003076.gbk"),
]

max_len = 30432563  # Could compute this from the entries dict
telomere_length = 1000000  # For illustration

chr_diagram = BasicChromosome.Organism()
chr_diagram.page_size = (29.7 * cm, 21 * cm)  # A4 landscape

for index, (name, filename) in enumerate(entries):
    record = SeqIO.read(filename, "genbank")
    length = len(record)
    features = [f for f in record.features if f.type == "tRNA"]
    # Record an Artemis style integer color in the feature's qualifiers,
    # 1 = Black, 2 = Red, 3 = Green, 4 = blue, 5 =cyan, 6 = purple
    for f in features:
        f.qualifiers["color"] = [index + 2]

    cur_chromosome = BasicChromosome.Chromosome(name)
    # Set the scale to the MAXIMUM length plus the two telomeres in bp,
    # want the same scale used on all five chromosomes so they can be
    # compared to each other
    cur_chromosome.scale_num = max_len + 2 * telomere_length

    # Add an opening telomere
    start = BasicChromosome.TelomereSegment()
    start.scale = telomere_length
    cur_chromosome.add(start)

    # Add a body - again using bp as the scale length here.
    body = BasicChromosome.AnnotatedChromosomeSegment(length, features)
    body.scale = length
    cur_chromosome.add(body)

    # Add a closing telomere
    end = BasicChromosome.TelomereSegment(inverted=True)
    end.scale = telomere_length
    cur_chromosome.add(end)

    # This chromosome is done
    chr_diagram.add(cur_chromosome)

chr_diagram.draw("tRNA_chrom.pdf", "Arabidopsis thaliana")

它可能会警告您标签太靠近-看看Chr I的正向链(右侧),但它应该创建一个彩色PDF文件,如 图 21 .