Python

pyGenomeVizの使い方|BLASTとGenBankから比較ゲノム図を描くPythonコード【1.7.0】

pyGenomeVizの使い方|BLASTとGenBankから比較ゲノム図を描くPythonコード【1.7.0】

pyGenomeVizは、ゲノム上の遺伝子の並びと、複数ゲノム間の相同領域を帯でつないだ比較ゲノム図を描くPythonパッケージです。matplotlibの上に作られていて、GenBankやGFFを読み込めば十数行で論文用の図が出せます。

対象は2026年6月13日公開の1.7.0です。この記事のコードはすべて、2026年11月5日にmacOS上のPython 3.13.14・pygenomeviz 1.7.0・matplotlib 3.11.2・BLAST+ 2.17.0で実行し、画像が出力されることを確かめています。公式ドキュメントに無い日本語ラベルの文字化けへの対処と、1.6系のコードが1.7.0で落ちる原因も扱います。

まとめ:pyGenomeViz 1.7.0で比較ゲノム図を描く要点

  • 導入は pip install pygenomeviz。1.7.0はPython 3.10以上が必須で、3.9では黙って1.6.1が入ります。
  • 描画は「GenomeVizを作る→add_feature_trackでトラックを足す→フィーチャーを置く→savefig」の4段階です。
  • ゲノム比較は pygenomeviz.align.Blast でアライメントし、結果を add_link に流します。BLAST+本体は別途インストールが必要です。
  • 読み込めるのはGenBank・GFF・FASTAの3形式です。BEDは自分で読んで座標を渡します。
  • 日本語のラベルは、既定のlightテーマだと plt.rcParams のフォント設定が描画時に戻されます。label_kws と text_kws にフォント名を渡します。
  • 1.7.0でトラックのメソッドから target_seg 引数が消えました。旧コードは track.get_segment(名前) 経由に書き換えます。

pyGenomeVizでできることと向かない用途

作者はmoshi4(Yuki Shimoyama)氏で、ソースはGitHubの moshi4/pyGenomeVizリポジトリ、ライセンスはMITです。使い方は3つあります。

  • Python API:Jupyter Notebookや解析スクリプトの中で図を組み立てる
  • CLI:pgv-blast などのコマンド1本で、アライメントから図の出力までを済ませる
  • GUI:pgv-gui でStreamlit製のWebアプリを起動し、GenBankをアップロードして図を作る

描けるのは線形の図だけです。プラスミドや細菌ゲノムを円形に描くなら、同じ作者のpyCirclizeがREADMEで案内されています。pygenomeviz.parser が公開しているクラスは Fasta・Genbank・Gff の3つで、BAMのリード被覆やVCFの変異を重ねる読み込み機能はありません。そうした図が主目的なら別のツールを選んでください。遺伝子配置と相同性を並べて見せる図に絞った道具です。

pyGenomeVizのインストール手順(pip・conda・Docker)

Python 3.10以上とvenvでのpipインストール

PyPIのpygenomeviz 1.7.0の requires-python は >=3.10、1つ前の1.6.1は >=3.9 です。Python 3.9で pip install pygenomeviz を実行すると、pipは条件を満たす1.6.1を選び、エラーを出さずに古い版を入れます。導入後は必ず版を確認してください。

# 仮想環境を作って有効化(macOS / Linux)
python3 -m venv .venv
source .venv/bin/activate

pip install pygenomeviz==1.7.0
python -c "import pygenomeviz; print(pygenomeviz.__version__)"
# 1.7.0

Windows(PowerShell)では有効化を .venv\Scripts\Activate.ps1 で行います。依存として biopython 1.80以上、matplotlib 3.6.3以上、numpy 1.21以上が一緒に入ります。venvとコンテナの隔離の違いは仮想環境とは?venv・コンテナ・仮想マシンの違いと隔離レベルの選び方を実装者向けに解説、uvで入れる場合の操作はuvとは?使い方とuv pip・uvx・uv syncの違い【uv 0.13.6で実測】で扱っています。

conda-forgeとDockerでの導入

BLASTやMUMmerも一緒に入れるなら、conda(bioconda併用)のほうが手間が減ります。Dockerの公式イメージにはアライナーも同梱されています。

conda install -c conda-forge -c bioconda pygenomeviz blast mummer mmseqs2

# Docker(公式イメージでGUIを起動)
docker run -it --rm -p 8501:8501 ghcr.io/moshi4/pygenomeviz:v1.7.0 pgv-gui

同じ環境でpipとcondaを混ぜると依存が壊れやすくなります。どちらに寄せるかはpipとcondaの違いと使い分け|混ぜると壊れる理由とAnaconda・Miniforgeの選び方を参考にしてください。

GUIと比較ワークフローに必要な追加インストール

pip版の本体だけでは、GUIとアライメントの自動実行は動きません。

使いたい機能 追加で入れるもの 導入例
pgv-gui streamlit 1.48.0以上 pip install “pygenomeviz[gui]”
Blast・pgv-blast BLAST+ sudo apt install ncbi-blast+
MUMmer・pgv-mummer MUMmer sudo apt install mummer
MMseqs・pgv-mmseqs MMseqs2 sudo apt install mmseqs2
pgv-pmauve progressiveMauve conda(bioconda)

condaもaptも使わないmacOSでは、NCBIのBLAST+配布ページにある ncbi-blast-2.17.0+-x64-macosx.tar.gz(Apple Silicon向けは aarch64-macosx)を展開し、bin をPATHに足すだけで使えました。pyGenomeVizが呼ぶのは makeblastdb・blastn・tblastx の3コマンドです。

基本の描画手順:GenomeViz→トラック→フィーチャー→保存

1000bpのトラックに3つの遺伝子を矢印で置き、PNGで保存する最小構成です。

from pygenomeviz import GenomeViz

gv = GenomeViz()
gv.set_scale_xticks(ymargin=0.5)

track = gv.add_feature_track("track", 1000)
track.add_sublabel()

# add_feature(開始, 終了, 向き)  向きは 1 が正鎖、-1 が逆鎖
track.add_feature(50, 200, 1)
track.add_feature(250, 460, -1, fc="blue")
track.add_feature(500, 710, 1, fc="lime", lw=1.0, label="geneC")

gv.savefig("features.png")

Jupyter Notebookで画面に出すときは fig = gv.plotfig() でmatplotlibの Figure を受け取り、セルの最後に置きます。Notebook環境の準備はJupyter Notebookのインストール手順|7.6系をpip・uv・condaで入れる方法にまとめています。

フィーチャーの矢印形状と配色指定

fc(塗り色)・ec(枠線色)・lw(線幅)はmatplotlibのPatchの引数がそのまま通ります。形は plotstyle で arrow(既定)・bigarrow・box・bigbox・rbox・bigrbox の6種類から選びます。big の付く形は鎖の向きにかかわらず軸線をまたいで描かれるので、遺伝子が密な細菌ゲノムでは bigarrow のほうが読みやすくなります。色名の書式などmatplotlib側の基本はMatplotlibとは?インストール方法と使い方・日本語化【3.11.2対応】を参照してください。

エクソンとイントロンを描くadd_exon_feature

真核生物の遺伝子は、エクソンの区間をリストで渡すと、間をイントロンの折れ線でつないだ1つのフィーチャーになります。

from pygenomeviz import GenomeViz

gv = GenomeViz()
gv.set_scale_xticks()
track = gv.add_feature_track("mRNA", 3000)

track.add_exon_feature([(100, 400), (600, 900), (1200, 1500)], strand=1, label="geneA")
track.add_exon_feature(
    [(1800, 2100), (2300, 2800)], strand=-1, plotstyle="box", label="geneB",
    patch_kws=dict(fc="darkgrey"), intron_patch_kws=dict(ec="red"),
)
gv.savefig("exon.png")

エクソン側の見た目は patch_kws、イントロン線は intron_patch_kws で別々に指定します。plotstyle="arrow"(既定)では最後のエクソンだけが矢印になり、向きが一目で分かります。

GenBank・GFFの読み込みとフィーチャー描画

GenBankのCDS抽出とラベル付き描画

Genbank クラスに渡したファイルから、配列長とフィーチャーを取り出して描きます。例は公式のサンプルデータ(エルシニアファージ4株)の1株目です。

from pygenomeviz import GenomeViz
from pygenomeviz.parser import Genbank
from pygenomeviz.utils import load_example_genbank_dataset

gbk_files = load_example_genbank_dataset("yersinia_phage")
gbk = Genbank(gbk_files[0])   # 自分のデータなら Genbank("my_genome.gbk")

gv = GenomeViz(fig_track_height=0.7)
gv.set_scale_bar(ymargin=0.5)

track = gv.add_feature_track(gbk.name, gbk.get_seqid2size())
for seg in track.segments:
    features = gbk.get_seqid2features("CDS")[seg.name]
    seg.add_features(features, label_type="product", lw=0.5)
    seg.add_sublabel()

gv.savefig("genbank_cds.png")

load_example_genbank_dataset は初回だけGitHubからデータを取得し、~/.cache/pygenomeviz/ に保存します。今回の実行では gbk.get_seqid2size() が {'NC_070914.1': 30280} を返し、CDSは52個でした。label_type="product" はGenBankのproduct修飾子(先頭CDSなら integrase)をラベルに使う指定です。複数のレコードを含むGenBankでは、レコードごとにセグメントが作られます。

アクセッション番号によるNCBIのGenBank取得

手元にファイルが無い公開ゲノムは、fetch_genbank_by_accid でNCBIから直接取れます。内部ではBiopythonの Entrez.efetch を rettype="gbwithparts" で呼んでいます。

from pygenomeviz.parser import Genbank
from pygenomeviz.utils import fetch_genbank_by_accid

gbk = Genbank(fetch_genbank_by_accid("NC_070914", "NC_070914.gbk"))
print(gbk.name, gbk.genome_length)   # NC_070914 30280

第2引数を指定するとファイルにも保存されるので、2回目からはそのファイルを読めばNCBIへの再アクセスが要りません。大量に取得するときは email= に連絡先を渡します。

GFFの領域指定描画と遺伝子注釈

細菌ゲノム全体を1本に描くと遺伝子が潰れます。segments に座標範囲を渡すと、その領域だけを並べて描けます。

from pygenomeviz import GenomeViz
from pygenomeviz.parser import Gff
from pygenomeviz.utils import load_example_gff_file

gff = Gff(load_example_gff_file("escherichia_coli.gff.gz"))

gv = GenomeViz()
gv.set_scale_bar(ymargin=0.5)

track = gv.add_feature_track(gff.name, segments=((215000, 230000), (300000, 320000)))
track.set_segment_sep()

for segment in track.segments:
    segment.add_sublabel()
    cds = gff.extract_features(feature_type="CDS", target_range=segment.range)
    segment.add_features(cds, label_type="gene", fc="skyblue", lw=1.0, annotation=True)

# 1.7.0 で追加された強調表示
track.segments[0].add_highlight((220000, 224000), color="orange")

fig = gv.plotfig()
fig.savefig("gff_region.png", bbox_inches="tight")

annotation=True は1.7.0で入った引数で、ラベルが重ならないよう引き出し線付きで配置します。注釈・凡例・サブトラックを足した図は gv.savefig() ではなく、gv.plotfig() で得た Figure の savefig() で保存するようGenomeViz APIドキュメントに書かれています。

BED6の座標読み込みとフィーチャー描画

BEDを読むクラスはありませんが、add_feature は開始・終了・向きを受け取るだけなので標準ライブラリで足ります。次の例は、ヘッダー行の無いタブ区切りのBED6(染色体名・開始・終了・名前・スコア・strand)が前提で、chr1の0〜3000の範囲だけを描きます。strandが「.」(向き不明)の行は矢印の向きを決められないため、エラーで止めます。

import csv
from pygenomeviz import GenomeViz

gv = GenomeViz()
gv.set_scale_xticks()
track = gv.add_feature_track("chr1", 3000)

with open("genes.bed") as f:
    for chrom, start, end, name, score, strand in csv.reader(f, delimiter="\t"):
        if chrom != "chr1":
            continue
        if strand not in ("+", "-"):
            raise ValueError("This example requires strand + or -")
        track.add_feature(int(start), int(end), 1 if strand == "+" else -1, label=name)

gv.savefig("bed.png")

座標の基準はそろっています。サンプルのGenBankで complement(70..1107) と書かれたCDSは、読み込むと [69:1107](-) になりました。Biopython経由の開始位置は0始まりで、BEDの開始位置と同じ基準なので変換は要りません。

BLASTによる複数ゲノムの比較図作成(Python API)

比較図の本体は、隣り合うトラックを結ぶ帯(リンク)です。pygenomeviz.align.Blast に複数のGenBankを渡すと、隣どうしの組み合わせでBLASTを実行し、結果を AlignCoord のリストで返します。

from pygenomeviz import GenomeViz
from pygenomeviz.parser import Genbank
from pygenomeviz.utils import load_example_genbank_dataset
from pygenomeviz.align import Blast, AlignCoord

gbk_list = [Genbank(f) for f in load_example_genbank_dataset("yersinia_phage")]

gv = GenomeViz(track_align_type="center")
gv.set_scale_bar()
for gbk in gbk_list:
    track = gv.add_feature_track(gbk.name, gbk.get_seqid2size(), align_label=False)
    for seqid, features in gbk.get_seqid2features("CDS").items():
        track.get_segment(seqid).add_features(features, plotstyle="bigarrow", fc="limegreen", lw=0.5)

# seqtype="protein" で tblastx、既定の "nucleotide" で blastn
coords = Blast(gbk_list, seqtype="protein").run()
coords = AlignCoord.filter(coords, length_thr=100, identity_thr=30)

if not coords:
    raise ValueError("No alignments passed the filters")
vmin = int(min(ac.identity for ac in coords))
for ac in coords:
    gv.add_link(ac.query_link, ac.ref_link, color="grey", inverted_color="red", v=ac.identity, vmin=vmin)
gv.set_colorbar(["grey", "red"], vmin=vmin, bar_label="Identity (%)")

gv.savefig("blast_compare.png")

4株(各3万bp前後)で実行すると、tblastxのヒットは295本、両配列側の対応区間が100塩基以上・アミノ酸配列の同一性が30%以上のヒットに絞ると209本になり、実行時間は全体で約12秒でした。v=ac.identity を渡すと同一性が高いほど濃い色で塗られ、set_colorbar が右下に凡例のカラーバーを描きます。向きが逆の対応(逆位)は inverted_color の赤で区別されます。

近縁株どうしなら blastn(既定)で十分です。属が違うなど塩基配列の保存度が低い組み合わせでは、アミノ酸レベルで比べる seqtype="protein" のほうが帯が多く残ります。そのぶん時間がかかるため、細菌の全ゲノムを並べるならMUMmerやMMseqs2(MUMmer・MMseqs クラス)を検討してください。

add_linkによる相同領域の手動接続

自前の解析結果を使う場合は、「(トラック名, 開始, 終了)」のタプルを2つ渡します。

from pygenomeviz import GenomeViz

gv = GenomeViz()
gv.add_feature_track("genome A", 1000)
gv.add_feature_track("genome B", 1000)
gv.add_link(("genome A", 150, 300), ("genome B", 50, 200))
# 片側の開始と終了を逆にすると逆位として inverted_color で塗られる
gv.add_link(("genome A", 700, 500), ("genome B", 700, 900), inverted_color="red", curve=True)
gv.savefig("manual_links.png")

結べるのは追加した順で隣り合うトラックだけです。1本目と3本目を直接結ぼうとすると LinkTrackNotFoundError(Target feature tracks must be adjacent feature tracks!!)で止まります。比較したい順にトラックを並べてください。

コードを書かずに比較図を出すCLIとpgv-gui

GenBankを並べて比較図を出すだけなら、CLIで足ります。コマンドは pgv-blast・pgv-mummer・pgv-mmseqs・pgv-pmauve の4つで、それぞれBLAST・MUMmer・MMseqs2・progressiveMauveを使います。

# サンプルデータをカレントディレクトリに取得
pgv-download yersinia_phage

# タンパク質レベルで比較し、長さ100以上・同一性30%以上のヒットだけを結ぶ
pgv-blast NC_070914.gbk NC_070915.gbk NC_070916.gbk NC_070918.gbk \
          -o pgv-blast_example --seqtype protein --show_scale_bar --curve \
          --feature_linewidth 0.3 --length_thr 100 --identity_thr 30

実行は約17秒で終わり、出力先には result.png・result.html・align_coords.tsv(アライメント座標と同一性の表)・pgv-cli.log の4ファイルができました。形式を指定しないとPNGとHTMLの2つが出ます。ログには実際に実行した makeblastdb と tblastx のコマンドが残るので、設定を論文の方法欄に書くときに使えます。解析を定期的に回すなら、Nextflowとは?26.04の導入手順とパイプラインの書き方・resumeの仕組みのようなワークフロー管理ツールに組み込むと再実行を管理しやすくなります。

pgv-gui はStreamlit製のWebアプリを http://localhost:8501 で起動します。Pythonを書かない共同研究者にGenBankをアップロードして図を作ってもらうときに向きます。Streamlitの仕組みはStreamlitとは?読み方・デメリットとできないこと、使い方とライセンスで解説しています。社内の解析基盤に認証やデータ管理を付けて組み込む場合は、フルスクラッチ開発で要件に合わせて作る選択肢もあります。

図の体裁を整える:凡例・トラック比率・GC含量・日本語ラベル

凡例とダークテーマ

pyGenomeVizは凡例を自動では描きません。plotfig() で得た Figure にmatplotlibの fig.legend で足します。次の例は、productが hypothetical で始まるCDSを灰色、それ以外を緑にして凡例を付けます。

from matplotlib.lines import Line2D
from pygenomeviz import GenomeViz
from pygenomeviz.parser import Genbank
from pygenomeviz.utils import load_example_genbank_dataset

gbk = Genbank(load_example_genbank_dataset("yersinia_phage")[0])

gv = GenomeViz(fig_track_height=0.7, theme="dark")   # 既定は "light"
gv.set_scale_xticks()
track = gv.add_feature_track(gbk.name, gbk.genome_length)
for f in gbk.extract_features("CDS"):
    product = str(f.qualifiers.get("product", [""])[0])
    color = "lightgrey" if product.startswith("hypothetical") else "limegreen"
    track.add_features(f, plotstyle="bigarrow", fc=color, lw=0.5)

fig = gv.plotfig()
fig.legend(
    handles=[
        Line2D([], [], marker=">", color="limegreen", ls="none", ms=12, label="known function"),
        Line2D([], [], marker=">", color="lightgrey", ls="none", ms=12, label="hypothetical"),
    ],
    bbox_to_anchor=(1, 1), loc="upper left", frameon=False, labelcolor="white",
)
fig.savefig("legend.png", bbox_inches="tight")

このファージでは52個のCDSのうち11個が hypothetical でした。theme="dark" は黒背景のスライド向けで、matplotlibの dark_background スタイルが適用されます。色分けの考え方は公式のPlot Tipsにも例があります。

フィーチャートラックとリンク領域の高さ比率

トラックの高さは比率で決まり、既定はフィーチャートラックが0.25、トラック間のリンク領域が1.0でした。以下は、先ほどのBLAST比較例で複数トラックを追加したgvに対し、保存前に実行する例です。最後のフィーチャートラックと最初のリンク領域の高さ比率を変更します。

gv.feature_tracks[-1].set_ratio(0.5)   # 最後のフィーチャートラックを2倍に
gv.link_tracks[0].set_ratio(2.0)       # 1つ目のリンク領域を2倍に

全フィーチャートラックをまとめて変えるなら、GenomeViz(feature_track_ratio=0.5) のように作成時に渡します。

GC含量の計算とサブトラック表示

add_subtrack でフィーチャートラックの下に空の軸を作り、そこへmatplotlibで任意のグラフを描けます。Genbank にはGC含量とGCスキューの計算メソッドがあります。

from pygenomeviz import GenomeViz
from pygenomeviz.parser import Genbank
from pygenomeviz.utils import load_example_genbank_dataset

gbk = Genbank(load_example_genbank_dataset("yersinia_phage")[0])
gv = GenomeViz(fig_track_height=0.7, feature_track_ratio=0.5)
gv.set_scale_xticks()
track = gv.add_feature_track(gbk.name, gbk.get_seqid2size())
track.add_subtrack(name="GC", ylim=(0, 100))
for seqid, features in gbk.get_seqid2features("CDS").items():
    track.get_segment(seqid).add_features(features, fc="steelblue", lw=0.5)

fig = gv.plotfig()
sub = track.get_subtrack("GC")
for seg in track.segments:
    seq = gbk.get_seqid2seq()[seg.name]
    x, gc = gbk.calc_gc_content(window_size=1000, step_size=200, seq=seq)
    # セグメント内の座標をトラック全体の座標に直してから描く
    sub.ax.fill_between(seg.transform_coord(x), gc, color="grey")
fig.savefig("gc_subtrack.png", bbox_inches="tight")

このファージの例では153点が計算され、各窓のGC含量を単純平均すると51.2%でした。この値は配列全体のGC含量とは計算方法が異なります。GCスキューは calc_gc_skew で同じ形の配列が返ります。seg.transform_coord を省くと、セグメントを複数並べたときに位置がずれます。

日本語のラベルが□になるときの対処

トラック名や遺伝子名に日本語を使うと、文字が□(豆腐)になり Glyph ... missing from font(s) DejaVu Sans という警告が出ます。matplotlibの定番の対処である plt.rcParams["font.family"] = "Hiragino Sans" を先に実行しても、既定のlightテーマでは同じ警告が出て直りませんでした。

原因は plotfig() の実装にあります。図を作る処理全体が plt.style.context("default")(ダークテーマでは dark_background)の中で動くため、lightテーマでは利用者が変えたフォント設定が既定値に戻ります。dark_background はフォントの設定を含まないため、darkテーマでは事前の設定が残り、警告も出ませんでした。テーマに関係なく確実なのは、ラベルごとにフォントを渡す方法です。

from pygenomeviz import GenomeViz

JP = dict(fontfamily="Hiragino Sans")   # macOSの例。WindowsならYu Gothicなど、OSにある日本語フォント名

gv = GenomeViz()
track = gv.add_feature_track("ゲノムA", 1000, label_kws=JP)   # トラック名
track.add_feature(100, 300, 1, label="遺伝子1", text_kws=JP)  # フィーチャーのラベル
gv.savefig("jp.png")

この書き方では警告が0件になり、日本語が正しく描かれました。fig.legend で足した凡例は plotfig() の外で描くので、prop=dict(family="Hiragino Sans") を渡します。論文やスライドで英語表記にするなら、この対処は要りません。

図の保存形式とdpi・HTMLビューア

savefig はファイル名の拡張子で形式を判別します。前述のGenBank例(30,280bp・1トラック)を各形式で保存したサイズです。

形式 メソッド サイズ 向く用途
PNG savefig(“x.png”) 133,621 バイト スライド・Web
JPG savefig(“x.jpg”) 103,605 バイト 容量優先の共有
SVG savefig(“x.svg”) 31,065 バイト Illustratorで修正
PDF savefig(“x.pdf”) 19,862 バイト 論文投稿
HTML savefig_html(“x.html”) 764,433 バイト 拡大して確認

解像度は dpi 引数で決まり、既定は100です。基本の描画例は既定で1719×340ピクセル、gv.savefig("features.png", dpi=300) では5157×1021ピクセルになりました。SVGはpyGenomeVizが svg.fonttype を none に設定するため、文字が図形ではなくテキストのまま残り、Illustratorで遺伝子名を直せます。

HTMLはJavaScriptのビューアを1ファイルに埋め込むので重くなる代わりに、ブラウザでパン・ズーム、フィーチャーのツールチップ表示ができます。注釈や凡例を足した図をHTMLにするときは、fig = gv.plotfig(fast_render=False) で作った図を gv.savefig_html("x.html", figure=fig) に渡します。

1.7.0の変更点と旧コードの移行

GitHubのv1.7.0リリースノートの主な変更です。

  • 追加:add_annotation()・add_promoter()・add_lollipop()・add_highlight()、add_features() の annotation 引数
  • 変更:Trackクラスの描画メソッドから target_seg 引数を削除
  • 変更:Python 3.9のサポートを終了

既存スクリプトが壊れるのは target_seg の削除です。1.7.0のトラックの add_feature や add_sublabel は先頭セグメントのメソッドをそのまま呼ぶため、旧コードの target_seg="..." は呼び出しの行では通り、matplotlibの描画オブジェクトまで渡ってから落ちます。

# track.add_feature(1, 100, 1, target_seg="t") のあと savefig
AttributeError: Arrow.set() got an unexpected keyword argument 'target_seg'

# track.add_sublabel(target_seg="t") のあと savefig
AttributeError: 'Text' object has no property 'target_seg'

エラーが savefig の行で出るので、原因の行を探しにくいのが厄介な点です。対象セグメントを取り出してから呼ぶ形に書き換えます。

# 1.6系まで
track.add_sublabel(target_seg="contig_2")

# 1.7.0
track.get_segment("contig_2").add_sublabel()

よくあるエラーと対処

症状 原因 対処
No module named ‘pygenomeviz’ 別のPythonに入れた venvを有効化して再実行
新しいメソッドが無い Python 3.9で1.6.1が入った Python 3.10以上で入れ直す
Failed to run ‘BLAST’ aligner!! BLAST+未導入・PATH不備 which makeblastdb blastn tblastx
unexpected keyword ‘target_seg’ 1.6系の書き方 get_segment経由に変更
LinkTrackNotFoundError 隣接しないトラックを結んだ トラックの並び順を変える
日本語が□になる lightテーマで既定フォントに戻る label_kws・text_kwsで指定
注釈や凡例が消える gv.savefigで保存 plotfigのFigureで保存

RuntimeError: Failed to run 'BLAST' aligner!! はCLIの pgv-blast でもAPIの Blast(...).run() でも同じ文言です。3コマンドがPATH上にあるのに出る場合は、直前のログに出ている実行コマンドをそのまま端末で実行すると原因が分かります。

よくある質問

pyGenomeVizのGitHubリポジトリと公式ドキュメントはどこですか?

ソースはGitHubのmoshi4/pyGenomeViz、ドキュメントは moshi4.github.io/pyGenomeViz で公開されています。ドキュメントにはGetting Started・Plot Tips・API・CLIの各ページがあり、READMEには描画例の画像が載っています。

pyGenomeVizは商用や論文で無料で使えますか?

MITライセンスなので、著作権表示とライセンス文を残せば無償で使えます。論文で使う場合は、リポジトリの CITATION.cff に引用情報(pyGenomeViz: A genome visualization python package for comparative genomics、Yuki Shimoyama)が用意されています。

pyGenomeVizで環状ゲノムは描けますか?

描けません。pyGenomeVizは線形の図専用で、環状の図には同じ作者のpyCirclizeがREADMEで案内されています。

BLASTを入れずに比較図は作れますか?

作れます。アライメントを自分で計算するか既存の結果ファイルから座標を読み、add_link に渡せばBLAST+は要りません。Blast クラスや pgv-blast を使うときだけBLAST+のインストールが必要です。

uvでインストールしても使えますか?

PyPIの通常のパッケージなので uv pip install pygenomeviz で入ります。1.7.0からは開発側のパッケージ管理もryeからuvに切り替わっています。

関連記事

お気に入りに入れた記事の一覧

一創の公式 SNS

X では毎朝の新着記事と IT ニュースの速報を、YouTube・TikTok・Instagram・LinkedIn・Facebook では記事の解説動画を配信しています。

この記事は以下の記事からリンクされています

資料請求

RELATED POSTS 関連記事

目次