Flash製グラフ作成「amcharts」
最近グラフを作成するためのツールを探したら「amcharts」がよさそう!
- 広告が小さい(左上にURL)
- PHPで簡単に作成するためのクラスを公開されてる方がいた
クラスが公開されていたサイトはこちら
http://neoinspire.net/archives/59
で、円グラフ以外も自分なりに使えるようにしてみた。
(公開されてるやつを元に作っちゃってるんで問題があればご一報を。)
サンプルとクラス
<?php /* Create Graph Using amCharts http://www.amcharts.com/ */ /* amcolumn Graph Data */ $array = ""; $array['series']['2001'] = 2001; $array['series']['2002'] = 2002; $array['series']['2004'] = 2004; $array['series']['2005'] = 2005; $array['graphs']['data1']['2001'] = 10; $array['graphs']['data1']['2002'] = 20; $array['graphs']['data1']['2004'] = 28; $array['graphs']['data1']['2005'] = 30; $array['graphs']['data2']['2001'] = 300; $array['graphs']['data2']['2002'] = 30; $array['graphs']['data2']['2004'] = 24; $array['graphs']['data2']['2005'] = 21; $array['graphs']['data3']['2001'] = 30; $array['graphs']['data3']['2002'] = 30; $array['graphs']['data3']['2004'] = 24; $array['graphs']['data3']['2005'] = 21; echo "<script type=\"text/javascript\" src=\"./amcolumn/swfobject.js\"></script>"; $graph = new CreateGraph($array,"amcolumn","data1.xml"); /* amline Graph Data */ $array = ""; $array['series'][0] = 1949; $array['series'][1] = 1950; $array['series'][2] = 1951; $array['series'][3] = 1952; $array['series'][4] = 1953; $array['series'][5] = 1954; $array['series'][6] = 1955; $array['series'][7] = 1956; $array['series'][8] = 1957; $array['series'][9] = 1958; $array['series'][10] = 1959; $array['series'][11] = 1960; $array['series'][12] = 1961; $array['series'][13] = 1962; $array['series'][14] = 1963; $array['series'][15] = 1964; $array['series'][16] = 1965; $array['series'][17] = 1966; $array['series'][18] = 1967; $array['series'][19] = 1968; $array['series'][20] = 1969; $array['series'][21] = 1970; $array['series'][22] = 1971; $array['series'][23] = 1972; $array['series'][24] = 1973; $array['series'][25] = 1974; $array['series'][26] = 1975; $array['series'][27] = 1976; $array['series'][28] = 1977; $array['series'][29] = 1978; $array['series'][30] = 1979; $array['graphs'][1][0] = 2.51; $array['graphs'][1][1] = 2.53; $array['graphs'][1][2] = 2.53; $array['graphs'][1][3] = 2.68; $array['graphs'][1][4] = 2.78; $array['graphs'][1][5] = 2.78; $array['graphs'][1][6] = 2.78; $array['graphs'][1][7] = 2.78; $array['graphs'][1][8] = 2.78; $array['graphs'][1][9] = 2.78; $array['graphs'][1][10] = 2.90; $array['graphs'][1][11] = 2.88; $array['graphs'][1][12] = 2.89; $array['graphs'][1][13] = 2.90; $array['graphs'][1][14] = 2.89; $array['graphs'][1][15] = 2.88; $array['graphs'][1][16] = 2.86; $array['graphs'][1][17] = 2.88; $array['graphs'][1][18] = 2.92; $array['graphs'][1][19] = 2.94; $array['graphs'][1][20] = 3.09; $array['graphs'][1][21] = 3.18; $array['graphs'][1][22] = 3.39; $array['graphs'][1][23] = 3.39; $array['graphs'][1][24] = 3.89; $array['graphs'][1][25] = 6.87; $array['graphs'][1][26] = 7.67; $array['graphs'][1][27] = 8.19; $array['graphs'][1][28] = 8.57; $array['graphs'][1][29] = 9.00; $array['graphs'][1][30] = 12.6; echo "<script type=\"text/javascript\" src=\"./amline/swfobject.js\"></script>"; $graphline = new CreateGraph($array,"amline"); /* ampie Graph Data */ $array = ""; $array['data1'] = 1; $array['data2'] = 2; $array['data3'] = 5; $array['data4'] = 10; echo "<script type=\"text/javascript\" src=\"./ampie/swfobject.js\"></script>"; $graph = new CreateGraph($array,"ampie","data.xml"); /* amxy Graph Data */ $array = ""; $array['graphs'][0][0] = "154/45/112"; $array['graphs'][0][1] = "300/215/90"; $array['graphs'][0][2] = "187/85/150"; $array['graphs'][0][3] = "198/32/160"; $array['graphs'][0][4] = "224/12/95"; $array['graphs'][0][5] = "244/19/78"; $array['graphs'][0][6] = "132/40/102"; $array['graphs'][1][0] = "44/80/50"; $array['graphs'][1][1] = "57/30/10"; $array['graphs'][1][2] = "185/112/115"; $array['graphs'][1][3] = "196/119/18"; $array['graphs'][1][4] = "20/82/73"; echo "<script type=\"text/javascript\" src=\"./amxy/swfobject.js\"></script>"; $graph = new CreateGraph($array,"amxy","data.xml"); Class CreateGraph{ var $array; // Graph Data var $dataname; // Data File Name var $foldername; // Xml Folder Name var $amcharts; // Amcharts Name var $width; // Graph Width var $height; // Graph height var $setting; // Graph Setting File /* Construct */ function CreateGraph($array,$amcharts,$dataname="data.xml",$width="520",$height="400",$setting="settings.xml",$foldername="data"){ $this->array = $array; $this->dataname = $dataname; $this->foldername = $foldername; $this->amcharts = $amcharts; $this->width = $width; $this->height = $height; $this->setting = $setting; $this->_ViewGraph(); $this->_PrintOut(); } /* Create Xml Data */ function _ViewGraph(){ switch ($this->amcharts){ case "ampie": $xml = '<pie>'; foreach($this->array as $key=>$value){ $xml.= '<slice title=\''.$key.'\'>'.$value.'</slice>'; } $xml .= '</pie>'; break; case "amcolumn": case "amline": $xml = "<chart>"; foreach($this->array as $key => $value){ if($key == "series"){ $xml .= "<series>"; foreach($value as $k => $v){ $xml.= "<value xid=\"".$k."\">".$v."</value>"; } $xml .= "</series>"; }else if($key == "graphs"){ $xml .= "<graphs>"; foreach($value as $key2 => $value2){ $xml .= "<graph gid=\"".$key2."\" title=\"".$key2."\">"; foreach($value2 as $key3 => $value3){ $xml .= "<value xid=\"".$key3."\">".$value3."</value>"; } $xml .= "</graph>"; } $xml .= "</graphs>"; } } $xml .= "</chart>"; break; case "amxy": $xml = "<chart>"; foreach($this->array as $key => $value){ if($key == "graphs"){ $xml .= "<graphs>"; foreach($value as $key2 => $value2){ $xml .= "<graph gid=\"".$key2."\">"; foreach($value2 as $key3 => $value3){ $point = explode("/", $value3); $xml .= "<point x=\"".$point[0]."\" y=\"".$point[1]. "\" value=\"".$point[2] ."\"/>"; } $xml .= "</graph>"; } $xml .= "</graphs>"; } } $xml .= "</chart>"; break; } $write = $this->_file_put_contents($this->amcharts ."/".$this->foldername."/".$this->amcharts."_".$this->dataname,$xml); } /* Print html&javascript codes */ function _PrintOut(){ print " <div id=\"".$this->amcharts.$this->dataname."\"> <strong>You need to upgrade your Flash Player</strong> </div> <script type=\"text/javascript\"> var so = new SWFObject(\"".$this->amcharts ."/".$this->amcharts.".swf\", \"".$this->amcharts."\", \"".$this->width."\", \"".$this->height."\", \"8\", \"#FFFFFF\"); so.addVariable(\"path\", \"".$this->amcharts ."/\"); so.addVariable(\"settings_file\", escape(\"".$this->amcharts ."/".$this->foldername."/".$this->amcharts."_".$this->setting."\")); so.addVariable(\"data_file\", escape(\"".$this->amcharts ."/".$this->foldername."/".$this->amcharts."_".$this->dataname."\")); so.addVariable(\"preloader_color\", \"#FFFFFF\"); so.write(\"".$this->amcharts.$this->dataname."\"); </script> "; } /* Create Xml Files */ function _file_put_contents($fileName, $data) { $res = fopen($fileName, 'w+b'); if($res){ $write = fwrite($res, $data); if($write === false){ return false; }else{ return $write; } } } } ?>
結果
こんなふうになるよーー。
http://iblis.org/graphsample/Class.CreateGraph.php
以下フォルダ構成
ダウンロードしたライブラリ以下にデータフォルダを作成し、
グラフのデータファイルとセッティングファイルを作るようにします。
sampleは以下のような感じでふ
graphsample ├ amcolumn *1 │ └ data │ ├ amcolumn_data.xml │ └ amcolumn_settings.xml ├ amline *2 │ └ data │ ├ amline_data.xml │ └ amline_settings.xml ├ ampie *3 │ └ data │ ├ ampie_data.xml │ └ ampie_settings.xml ├ amxy *4 │ └ data_1 │ ├ amxy_data.xml │ └ amxy_settings.xml └ Class.CreateGraph.php