mei_13のPython講座 ロゴ

【Pythonコラム】Pythonでグラフを美しく描画!Graphviz入門




Pythonでグラフを美しく描画!Graphviz入門

「グラフ構造」と聞くと、少し難しく感じるかもしれません。しかし、グラフは、ネットワーク図、組織図、フローチャートなど、様々な情報を視覚的に表現する強力なツールです。Pythonには、そんなグラフ構造を美しく描画するための便利なライブラリ、Graphvizがあります。

このコラムでは、Graphvizの基本的な使い方を、初心者の方にもわかりやすく解説します。

Graphvizとは?

Graphviz (Graph Visualization Software) は、AT&T研究所が開発したグラフ描画ツールです。テキスト形式でグラフ構造を記述し、それを様々な形式(PNG, JPEG, SVGなど)の画像として出力できます。

Pythonのgraphvizライブラリは、このGraphvizをPythonから簡単に利用できるようにするラッパーライブラリです。

インストール

まずは、Graphviz本体とPythonのgraphvizライブラリをインストールしましょう。

Graphviz本体のインストール:

  • Windows: Graphvizの公式サイト (https://graphviz.org/download/) からインストーラをダウンロードし、実行します。インストール後、環境変数PATHにGraphvizのbinディレクトリ(例: C:\Program Files\Graphviz\bin)を追加する必要があります。
  • macOS: Homebrewを使っている場合は、brew install graphvizでインストールできます。
  • Linux: 各ディストリビューションのパッケージマネージャ(apt, yum, dnfなど)を使ってインストールします(例: sudo apt install graphviz)。

Pythonライブラリのインストール:

ターミナルまたはコマンドプロンプトで、以下のコマンドを実行します。

pip install graphviz

簡単なグラフを描画してみよう

それでは、実際にGraphvizを使ってグラフを描画してみましょう。

import graphviz

# Digraphオブジェクトを作成
dot = graphviz.Digraph(comment='The Round Table')

# ノードを追加
dot.node('A', 'King Arthur')
dot.node('B', 'Sir Bedevere the Wise')
dot.node('L', 'Sir Lancelot the Brave')

# エッジを追加
dot.edges(['AB', 'AL'])

# 出力ファイル名と形式を指定して保存
dot.render('round-table.gv', view=True)

このコードを実行すると、round-table.gv.pdfというファイルが生成され、以下のようなグラフが表示されます。

  • graphviz.Digraph(comment='The Round Table'): 有向グラフ (Digraph) を作成します。commentはグラフのコメントです。
  • dot.node('A', 'King Arthur'): ノードを追加します。最初の引数(例: 'A')はノードのID、2番目の引数(例: 'King Arthur')はノードに表示されるラベルです。
  • dot.edges(['AB', 'AL']): エッジを追加します。'AB'はノードAからノードBへのエッジを表します。
  • dot.render('round-table.gv', view=True): グラフを画像ファイルとして保存します。'round-table.gv'は出力ファイル名 (拡張子なし) を指定し、view=True は保存後に自動的に画像ビューアで開くことを指示します。

グラフの属性を変更する

Graphvizでは、ノードやエッジの色、形状、フォントなど、様々な属性を変更できます。

import graphviz

dot = graphviz.Digraph(comment='Favorite Colors')

dot.node('A', 'Red', style='filled', fillcolor='red')
dot.node('B', 'Green', style='filled', fillcolor='green')
dot.node('C', 'Blue', style='filled', fillcolor='blue')

dot.edge('A', 'B', color='purple')
dot.edge('B', 'C', color='orange')
dot.edge('C', 'A', color='yellow')

dot.render('colored-graph.gv', view=True)

この例では、ノードA, B, Cをそれぞれ赤、緑、青で塗りつぶし、エッジの色を紫、オレンジ、黄色に設定しています。

  • style='filled', fillcolor='red': node()メソッドでノードのスタイルと塗りつぶし色を指定します。
  • color='purple': edge()メソッドでエッジの色を指定します。

他にも、shape(ノードの形状)、fontname(フォントの種類)、fontsize(フォントサイズ)など、多くの属性を設定できます。詳細はGraphvizのドキュメントを参照してください。

複雑なグラフを描画する

もっと複雑なグラフを描画することも可能です。例えば、サブグラフを使ってグラフをグループ化したり、異なる形状のノードを組み合わせて、より表現力豊かなグラフを作成できます。

まとめ

GraphvizとPythonのgraphvizライブラリを使うことで、美しく、見やすいグラフを簡単に描画できます。組織図、フローチャート、ネットワーク図など、様々な情報を視覚化する際に、ぜひ活用してみてください。Graphvizの豊富な機能を使いこなして、効果的な情報伝達を目指しましょう。



サンプルコードを見る


< Biopython
コラム一覧に戻る
Django >

レッスン概要

◯月額4,000円で質問し放題!!
◯完全オンライン
◯翌日までには必ず返信
◯挫折しない独自の学習メソッド
◯圧倒的高評価!!
◯テキストベースで時間を選ばない
◯高品質なサンプルコード
詳細はこちら
興味がある方はまず質問だけでもどうぞ!