blog.kur.jp

バイオリンと山、自転車をこよなく愛するkurのチラシの裏。たまには技術的なことを書いたりするかも知れません。

PHPでヒートマップを生成する

自分専用Webアクセス解析を作っていると、ヒートマップ画像を生成したくなる時ありますよね。PHPでは簡単に画像を生成することが出来るので、色の設定さえやってしまえば、お手軽にヒートマップを生成することが出来ます。

以下、PHPを使ったヒートマップの作り方です。というか、どの言語でも基本的なやり方は同じなので応用できるはず。

1.データを用意する

まず、ヒートマップを生成するために0~255の256段階で構成される2次元配列を用意します。この配列の各要素の値に応じて色をつけて行きます。

下の画像は、0~255の256段階で構成される2次元配列を画像にしたものです。ちなみに配列の中で0と指定した場所が黒に、255と指定した場所が白になっています。

image

2.色を割り当てる

用意した0~255のモノクロデータ の各値にカラーを割り当てて行きます。色の割り当ては好みで良いと思うのですが、良くあるヒートマップだと青→緑→赤と変化するようになっていますので、それに習って色を設定してみます。まぁ、このへんはお好みで。

image

3.ヒートマップ画像を生成する

0~255に割り当てた色を画像に反映させます。

image

おまけ:ヒートマップ生成コード

最後に、上記画像を生成するための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);
?>