Graphvizの描画エンジンを使い分ければ、ごちゃついた図は消える

Mastering Layout Engines in Graphviz: Dot vs. Neato vs. Twopi vs. Circo

Graphvizの描画エンジンを使い分ければ、ごちゃついた図は消える

Graphvizの描画品質は、どのレイアウトエンジンを選ぶかで大きく変わる。階層的なDAGに向くdot、力学モデルで無向ネットワークを整えるneato、ルートからの距離で同心円に配置するtwopi、環状構造を描くcirco。それぞれのアルゴリズムの違いと適したデータ構造を比較し、エンジンを切り替えながら最適な図を選ぶ方法を解説する。

間違ったレイアウトエンジンを選ぶと、ノードの重なりや交差する線が発生し、読めないアーキテクチャ図になってしまう。
  1. AceJohnny2

    余談ですが、過小評価されているgvpr [1]について強調しておきたい。これはGraphviz Pattern Scanning and Processing Languageであり、Graphvizのインストールに含まれている。要するに、.dotファイルを処理するためのAWKライクなプログラムだ。

    DOT構文では段階的に精度を高められる、つまり既存のDOTドキュメントにディレクティブを追加して詳細(形状、位置など)を加えられるという事実と組み合わせれば、最終的なレイアウトとレンダリングエンジンに渡す前にグラフの前処理ができる。

    (実際、リンク先のレイアウトエンジンのすべてをgvprで実装できるだろう)

    私はかつてこれを使ってFactorioの生産グラフを生成し、各レイヤーを最小生産深度で整理した(つまり鉱石はレイヤー1、プレートはレイヤー2、など...)

    [1] https://graphviz.org/docs/cli/gvpr/

  2. meh2frdf

    最近この分野で仕事をしているが、どのレイアウトエンジンもあまり良くない。本質的にすべてのものに同じアルゴリズムを適用しているが、実際にはグラフはしばしば異なるパターンの集合体であり、意味論に基づくことが多い。だからそう、自分で作った。ユースケースはクラウドとエンタープライズアーキテクチャの表現だ。今はまともなレイアウトエンジンがあり、エージェントが対話するための宣言的DSLも作ったが、エージェントはダメだ。多くの機能やスキルを手作業で実装する必要があると感じる。

  3. aezart

    私は時々graphvizを使うが、ほぼいつもイライラさせられる。構文は細かすぎるし、結果の出力は最も単純なグラフ以外ではかなり醜い。

この日のほかの記事

2026-09-17