PHP
Graphviz
ツリー構造

Graphvizを使ってPHPで簡単にツリー構造を描画する

Graphvizとは

ファイル構造とかクラスの継承関係などを見える化するのに便利なツールです。本来DOTという言語で書かれたものをビジュアライズさせるツールだそうです。

Graphvizとdot言語でグラフを描く方法のまとめ

必要なものをインストール

そんな便利なGraphvizを今回はPHPから扱いたいと思います。
Graphviz自体とそれをPHPから使うためのパッケージをPEARからインストールします。

$ brew install graphviz
$ pear install Image_GraphViz

 サンプルコード

例としてA-Zの文字列を二分木しました。階層ごとにフォントを小さくしてます。

<?php

require_once 'Image/GraphViz.php';

$a = range('A','Z');
$font_size = 20;
$file_name = 'data.png';

$g = new Image_GraphViz();

// ノードの登録
for ($i=0; $i < count($a); $i++) {
    $g->addNode(
        $a[$i],
        [
            'fontsize' => $font_size*(0.8**(strlen(decbin($i+1))-1)),
            'shape' => 'box'
        ]
    );
}

// エッジの登録
for ($i=0; $i < count($a); $i++) {
    if ($i != 0) {
        $g->addEdge(
            [
                $a[floor(($i-1)/2)] => $a[$i]
            ],
            [
                'label' => $a[floor(($i-1)/2)].'_'.$a[$i]
            ]
        );
    }
}

// PNGで出力
file_put_contents($file_name,$g->fetch('png'));

ノードを登録し、それらをエッジで結ぶように書くだけ。実にシンプルです。

出力結果

data.png