Flash製グラフ作成「amcharts」

最近グラフを作成するためのツールを探したら「amcharts」がよさそう!

  1. 広告が小さい(左上にURL)
  2. 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

*1:ダウンロードした Line & Area chart Library

*2:ダウンロードした Column & Bar chart Library

*3:ダウンロードした Pie & Donut chart Library

*4:ダウンロードした Scatter & Bubble chart Library