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の豊富な機能を使いこなして、効果的な情報伝達を目指しましょう。
サンプルコードを見る
自己紹介
Pythonのレッスンを受けたいという方、お待ちしています!
https://coconala.com/services/3190048
Xアカウントはこちら
レッスン概要
◯完全オンライン
◯翌日までには必ず返信
◯挫折しない独自の学習メソッド
◯圧倒的高評価!!
◯テキストベースで時間を選ばない
◯高品質なサンプルコード
詳細はこちら
興味がある方はまず質問だけでもどうぞ!
