9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?