「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の豊富な機能を使いこなして、効果的な情報伝達を目指しましょう。



サンプルコードを見る





自己紹介

フリーランスエンジニア/Python講師をしているmei_13です。
Pythonのレッスンを受けたいという方、お待ちしています!
https://coconala.com/services/3190048
Xアカウントはこちら


レッスン概要

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




< Biopython
if文 >







コラム一覧

if文
for文
関数
配列
文字列
正規表現
ファイル入出力
openpyxl
Numpy
Matplotlib
Pandas
scikit-learn
seaborn
beautifulsoup
tkinter
OpenCV
pygame
メイン関数
自作ライブラリ
画像処理
機械学習
スクレイピング
データ分析
グラフ作成
API
可読性
デバッグ
例外処理
コメント
組み込み関数
flask
学び方
ビット演算
マルチスレッドプログラミング
参照渡し
pyenv
エディタ
生成AI
画像認識
Streamlit
lambda式
物理演算シミュレーション
命名規則
遺伝的アルゴリズム
関数型プログラミング
オブジェクト指向
ツリー図
Anaconda
Google Colaboratory
PyTorch
NLTK
音声処理
yt-dlp
組み込み開発
データベース操作
iclawler
PyCaret
pickle
plotly
polars
Mecab
乱数
PyInstaller
MySQL
Pip
sys.argv
データ型
secrets
MediaPipe
YOLO
ソート
主成分分析 (PCA)
多層パーセプトロン (MLP)
Convolutional Neural Network (CNN)
ランダムフォレスト
LightGBM
Ansible
Boto3
Terraform
Prometheus Client Library
ELK Stack
Fabric
Netmiko
Gemini
Scipy
SymPy
Numba
Dask
MLflow
LangSmith
LangChain
LlamaIndex
Biopython
Graphviz