圖形包含 GenomeDiagram

Bio.Graphics 模組依賴於第三方 Python 函式庫 ReportLab。雖然 ReportLab 主要用於產生 PDF 檔案,但它也可以建立封裝式 PostScript (EPS) 和 (SVG) 檔案。除了這些向量式影像之外,如果安裝了某些其他依賴項(例如 Python Imaging Library (PIL)),ReportLab 也可以輸出點陣圖影像(包括 JPEG、PNG、GIF、BMP 和 PICT 格式)。

GenomeDiagram

簡介

Bio.Graphics.GenomeDiagram 模組已新增至 Biopython 1.50,之前是作為依賴 Biopython 的獨立 Python 模組提供。GenomeDiagram 在 Pritchard 等人 (2006) 的《生物資訊學》期刊出版物中有所描述 [Pritchard2006],其中包含一些範例圖片。舊版手冊的 PDF 副本在此處 https://biopython.dev.org.tw/DIST/docs/GenomeDiagram/userguide.pdf,其中包含更多範例。

顧名思義,GenomeDiagram 旨在繪製整個基因組,特別是原核基因組,以線性圖(可選擇分割成片段以更好地符合)或環狀輪圖的形式。請參閱 Toth *等人* (2006) 中的圖 2 [Toth2006],以獲得良好的範例。它也適用於為較小的基因組(如噬菌體、質體或粒線體)繪製相當詳細的圖,例如,參閱 Van der Auwera *等人* (2009) 中的圖 1 和圖 2 [Vanderauwera2009](顯示為額外的手動編輯)。

如果您已將基因組載入為包含許多 SeqFeature 物件的 SeqRecord 物件(例如從 GenBank 檔案載入的),則此模組最容易使用(請參閱章節 序列註解物件序列輸入/輸出)。

圖表、軌道、特徵集和特徵

GenomeDiagram 使用一組巢狀物件。在最上層,您有一個圖表物件,代表沿著水平軸(或圓形)的序列(或序列區域)。一個圖表可以包含一個或多個軌道,這些軌道以垂直方式堆疊(或在圓形圖表上以放射狀排列)。這些軌道通常都具有相同的長度,並且代表相同的序列區域。您可以使用一個軌道來顯示基因位置、另一個軌道來顯示調控區域,以及第三個軌道來顯示 GC 百分比。

最常用的軌道類型將包含特徵,這些特徵捆綁在特徵集中。您可以選擇為所有 CDS 特徵使用一個特徵集,而為 tRNA 特徵使用另一個特徵集。這不是必需的,它們都可以放在同一個特徵集中,但這樣可以更輕鬆地更新僅選定特徵的屬性(例如,將所有 tRNA 特徵設為紅色)。

有兩種主要方式可以建立完整的圖表。首先,由上而下的方法,您建立一個圖表物件,然後使用其方法新增軌道,並使用軌道方法新增特徵集,並使用其方法新增特徵。其次,您可以單獨建立個別物件(以適合您程式碼的任何順序),然後將它們組合起來。

由上而下的範例

我們將從 GenBank 檔案讀取的 SeqRecord 物件中繪製整個基因組(請參閱章節 序列輸入/輸出)。此範例使用來自 *鼠疫耶爾辛氏菌微小變種* 的 pPCP1 質體,該檔案包含在 Biopython 單元測試的 GenBank 資料夾下,或在線上 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()

現在是有趣的部分 - 我們取得 SeqRecord 中的每個基因 SeqFeature 物件,並使用它在圖表上產生一個特徵。我們將它們塗成藍色,在深藍色和淺藍色之間交替。

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 中。

Simple linear diagram for *Y. pestis biovar Microtus* plasmid pPCP1.

圖 9 *鼠疫耶爾辛氏菌微小變種* 質體 pPCP1 的簡單線性圖。

請注意,我們設定為四的 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 中。

Simple circular diagram for *Y. pestis biovar Microtus* plasmid pPCP1.

圖 10 *鼠疫耶爾辛氏菌微小變種* 質體 pPCP1 的簡單圓形圖。

這些圖形不是很令人興奮,但我們才剛開始。

由下而上的範例

現在讓我們使用由下而上的方法產生完全相同的圖形。這表示我們直接建立不同的物件(而且幾乎可以以任何順序執行),然後將它們組合起來。

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 方法,以使用上方由上而下範例末尾的程式碼產生線性或圓形圖。這些圖形應該是相同的。

沒有 SeqFeature 的特徵

在上述範例中,我們使用 SeqRecordSeqFeature 物件來建立我們的圖表(另請參閱章節 特徵、位置和方位物件)。有時您不會有 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 的頂部(以預設特徵顏色淺綠色顯示)。

請注意,我們在這裡使用了 name 引數來指定這些特徵的標題文字。接下來將更詳細地討論此內容。

特徵標題

回想一下,我們使用以下程式碼(其中 featureSeqFeature 物件)將特徵新增至圖表

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

在上述範例中,SeqFeature 註解用於為特徵選擇合理的標題。預設情況下,使用 SeqFeature 物件的限定詞字典下的以下可能條目:genelabelnamelocus_tagproduct。更簡單地說,您可以直接指定名稱

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 中的軌道。

Simple GenomeDiagram showing label options.

圖 11 簡單的 GenomeDiagram 展示標籤選項。

淺綠色的頂部繪圖顯示預設標籤設定(請參閱沒有 SeqFeature 的特徵章節),而其餘部分則顯示標籤大小、位置和方向的變化(請參閱特徵標題章節)。

我們這裡沒有展示,但您也可以設定 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 符號不同,總是跨在軸上,方向取決於特徵的鏈。

Simple GenomeDiagram showing different sigils

圖 12 簡單的 GenomeDiagram 展示不同的符號。

箭頭符號

我們在上一節中介紹了箭頭符號。有兩個額外的選項可以調整箭頭的形狀,首先是箭頭軸的粗細,以邊界框高度的比例給出

# 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中。

Simple GenomeDiagram showing arrow shaft options

圖 13 簡單的 GenomeDiagram 展示箭頭軸選項。

其次,箭頭頭部的長度 - 以邊界框高度的比例給出(預設為 \(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中。

Simple GenomeDiagram showing arrow head options

圖 14 簡單的 GenomeDiagram 展示箭頭頭部選項。

Biopython 1.61 添加了一個新的 BIGARROW 符號,它總是跨在軸上,反向鏈指向左邊,否則指向右邊

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

上面顯示的 ARROW 符號的所有軸和箭頭頭部選項也可用於 BIGARROW 符號。

一個很好的範例

現在讓我們回到來自鼠疫耶爾森氏菌微型變種的 pPCP1 質體,以及由上而下的範例章節中使用的由上而下的方法,但利用我們現在討論過的符號選項。這次我們將對基因使用箭頭,並將它們與顯示一些限制酶切位點位置的無鏈特徵(作為普通方塊)疊加在一起。

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")

預期的輸出顯示在顯示所選限制酶切位點的質體 pPCP1 線性圖。顯示所選限制酶切位點的質體 pPCP1 環狀圖。

Linear diagram for plasmid showing selected restriction digest sites

圖 15 顯示所選限制酶切位點的質體 pPCP1 線性圖。

Circular diagram for plasmid showing selected restriction digest sites

圖 16 顯示所選限制酶切位點的質體 pPCP1 環狀圖。

多個軌道

到目前為止,所有範例都使用單個軌道,但您可以有多個軌道 – 例如,在一個軌道上顯示基因,在另一個軌道上顯示重複區域。在這個範例中,我們將並排顯示三個噬菌體基因組,並按比例縮放,靈感來自 Proux et al. (2002) [Proux2002] 的圖 6。我們將需要以下三個噬菌體的 GenBank 檔案

  • NC_002703 – 乳酸桿菌噬菌體 Tuc2009,完整基因組 (\(38347\) bp)

  • AF323668 – 噬菌體 bIL285,完整基因組 (\(35538\) bp)

  • NC_003212無害李斯特菌 Clip11262,完整基因組,我們只關注其中的整合前噬菌體 5(長度相似)。

如果您願意,可以使用 Entrez 下載這些,請參閱EFetch:從 Entrez 下載完整記錄章節以了解更多詳細資訊。對於第三個記錄,我們已經計算出噬菌體整合到基因組中的位置,並將記錄切片以提取它(保留特徵,請參閱切片 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)

我們模仿的圖使用了不同的顏色來表示不同的基因功能。一種方法是編輯 GenBank 檔案以記錄每個特徵的顏色偏好 - 桑格的 Artemis 編輯器 確實可以做到這一點,而 GenomeDiagram 應該可以理解。然而,在這裡,我們只會硬編碼三個顏色列表。

請注意,GenBank 檔案中的註釋與 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中。

Linear diagram with three tracks for three phages

圖 17 三個噬菌體的三個軌道的線性圖。

這顯示了乳酸桿菌噬菌體 Tuc2009 (NC_002703)、噬菌體 bIL285 (AF323668) 和來自無害李斯特菌 Clip11262 (NC_003212) 的前噬菌體 5(請參閱多個軌道章節)。

我確實想知道為什麼在原始手稿中,底部噬菌體中沒有標記紅色或橙色基因。另一個重點是,這裡顯示的噬菌體長度不同 - 這是因為它們都是按相同比例繪製的(它們確實長度不同)。

與已發布圖表的關鍵差異在於,它們在相似的蛋白質之間具有顏色編碼的連結 – 這就是我們在下一節中所要做的。

更多選項

您可以控制刻度標記來顯示比例尺 - 畢竟,每個圖表都應顯示其單位以及灰色軌道標籤的數量。

此外,到目前為止我們只使用了 FeatureSet。GenomeDiagram 還有一個 GraphSet,可用於顯示折線圖、長條圖和熱圖(例如,顯示與特徵平行的軌道上的 GC% 圖)。

這些選項目前尚未涵蓋,因此現在我們將您推薦到 GenomeDiagram 獨立版本中包含的使用者指南 (PDF)(但請先閱讀下一節)和 docstrings。

轉換舊程式碼

如果您有使用 GenomeDiagram 獨立版本編寫的舊程式碼,並且想要將其切換為使用 Biopython 中包含的新版本,則必須進行一些更改 - 最重要的是對您的 import 語句進行更改。

此外,舊版本的 GenomeDiagram 僅使用 color 和 center 的英國拼法(colour 和 centre)。您需要更改為美國拼法,儘管幾年來 Biopython 版本的 GenomeDiagram 都支援兩者。

例如,如果您過去有

from GenomeDiagram import GDFeatureSet, GDDiagram

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

您可以像這樣切換 import 語句

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 模組允許繪製染色體。在 Jupe et al. (2012) [Jupe2012](開放存取)中有一個範例使用顏色來突出顯示不同的基因家族。

簡單染色體

這裡有一個非常簡單的範例 - 我們將使用擬南芥

Simple chromosome diagram for *Arabidopsis thaliana*.

圖 20 擬南芥的簡單染色體圖。

您可以跳過這部分,但我首先從 NCBI 的 FTP 站點 ftp://ftp.ncbi.nlm.nih.gov/genomes/archive/old_refseq/Arabidopsis_thaliana/ 下載了五個已排序的染色體作為五個獨立的 FASTA 檔案,然後使用 Bio.SeqIO 解析它們以找出它們的長度。您可以使用 GenBank 檔案執行此操作(並且下一個範例使用這些檔案來繪製特徵),但是如果只需要長度,則使用整個染色體的 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所示。此範例刻意簡短而精要。下一個範例顯示感興趣的特徵的位置。

帶註釋的染色體

Chromosome diagram for *Arabidopsis thaliana* showing tRNA.

圖 21 顯示 tRNA 基因的擬南芥染色體圖。

從上一個範例繼續,我們也來顯示 tRNA 基因。我們將透過解析五個擬南芥染色體的 GenBank 檔案來取得它們的位置。您需要從 NCBI FTP 站點 ftp://ftp.ncbi.nlm.nih.gov/genomes/archive/old_refseq/Arabidopsis_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所示。