自分専用Webアクセス解析を作っていると、ヒートマップ画像を生成したくなる時ありますよね。PHPでは簡単に画像を生成することが出来るので、色の設定さえやってしまえば、お手軽にヒートマップを生成することが出来ます。
以下、PHPを使ったヒートマップの作り方です。というか、どの言語でも基本的なやり方は同じなので応用できるはず。
1.データを用意する
まず、ヒートマップを生成するために0~255の256段階で構成される2次元配列を用意します。この配列の各要素の値に応じて色をつけて行きます。
下の画像は、0~255の256段階で構成される2次元配列を画像にしたものです。ちなみに配列の中で0と指定した場所が黒に、255と指定した場所が白になっています。
2.色を割り当てる
用意した0~255のモノクロデータ の各値にカラーを割り当てて行きます。色の割り当ては好みで良いと思うのですが、良くあるヒートマップだと青→緑→赤と変化するようになっていますので、それに習って色を設定してみます。まぁ、このへんはお好みで。
3.ヒートマップ画像を生成する
0~255に割り当てた色を画像に反映させます。
おまけ:ヒートマップ生成コード
最後に、上記画像を生成するためのPHPコードを貼り付けます。何かの参考になれば。
<?php function getR($i){ if($i < 128){ $ret = 0; }else if($i > 127 && $i < 191){ $ret = ($i-127)*4; }else if($i > 190){ $ret = 255; } return $ret; } function getG($i){ if($i >= 64 && $i <= 191){ $ret = 255; }else if($i < 64){ $ret = $i * 4; }else{ $ret = 256-($i-191)*4; } return $ret; } function getB($i){ if($i <= 64){ $ret = 255; }else if($i > 64 && $i < 127){ $ret = 255-($i-64)*4; }else if($i >= 127){ $ret = 0; } return $ret; } header("content-type: image/png"); $image = imagecreate(512,100); for($i = 0; $i < 256;$i++){ $tmp = imagecolorallocate($image, GetR($i), GetG($i), GetB($i)); imagefilledrectangle($image, $i * 2 , 0, ($i * 2)+2, 99 , $tmp ); } imagepng($image); imagedestroy($image); ?>