« MyMiniCityの国別分類表を作ってみた | トップページ | チーターマンはアレンジではやっているらしい »

2008.04.27

Google Chart APIとPHPで円グラフを書いてみる

Google Chart APIという無料でグラフが書けるGoogleのサービスがある。実際に町作りゲームのMyMiniCityを支援するツールの付加機能として、参加している国を分類して図示するのにGoogle Chart APIを使ってみた。ドキュメントは英語なのですが、一度使ってみれば敷居は高くありません。

今回のコードでは英語しか扱わないので問題ないですが、UTF-8であれば日本語(ひらがなのみ?)も通るようです。

むしろ値を普通の十進で渡しにくい(URLが長くなりすぎる)ので、Simple encodingという方法を使うわけですが、これさえクリアすれば、円グラフは書けます。具体的には、円グラフの中で最大値になるものにできるだけ大きな値(今回は51であるz)をわりあてて、より小さな値を比例配分した文字に割り当ててやればスムースに行きます。

今回は関数のPHPのコードも公開。配列$nameに名前、配列$numに実際にデーターを入れて呼び出します。実際は連想配列を使ってもいいかもしれませんね。関数内の$thresholdに1をいれて、1%以下になる項目は表示しないようにしています。細かくなりすぎるとよくわからなくなることの予防です。 画像のサイズは、この関数では500×200ピクセルに固定です。ドキュメントによると、縦に対して平面円グラフは横が2倍、3D円グラフは横が2.5倍程度ないと正常に表示できないそうです。

(Firefoxでは長い行が折り返されないため、読めない部分があるかもしれません。)

function google_chart_draw_pai($name ,$num)
{
    $data = "chd=s:";
    $sum_data = array_sum($num) ;
    $threshold = 1 ; // %表記、下回るとOthersとしてまとめる。

    for( $i=0 ; $i<count($num) ; $i++)
    {
        if ($num[$i]*100<$sum_data*$threshold)
        {
             $others_num += $num[$i];
         }
    }

    $max_num = max( $others_num , max($num));

    // Simple encoding mapping 0 to 51
    //    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
    for( $i=0 ; $i<count($num) ; $i++)
    {
    if ($num[$i]*100>$sum_data*$threshold)
        {

        $data .= substr("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",$num[$i]/$max_num*51,1);
        $name_data .= $name[$i]."|";
        }
    }
    if($others_num != 0)
    {
        $data .= substr("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",$others_num/$max_num*51,1);
        $name_data .= "Others";
    }   
    $index=$data."&chl=".$name_data;

// 出力

echo '<img src="http://chart.apis.google.com/chart?cht=p&chs=500x200&'.$index.'">';

}

« MyMiniCityの国別分類表を作ってみた | トップページ | チーターマンはアレンジではやっているらしい »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/12995/41009460

この記事へのトラックバック一覧です: Google Chart APIとPHPで円グラフを書いてみる:

« MyMiniCityの国別分類表を作ってみた | トップページ | チーターマンはアレンジではやっているらしい »

2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31