4
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
4
Help us understand the problem. What are the problem?