越简单越好!

php绘图之直方图

发表于 2007-10-23 09:56 | 105次阅读 0次点赞   PHP

本程序根据文本文件DS.txt中的数据生成直方图。DS.txt的内容如下:

a,33
b,3
c,56
d,77

其中第一列为X轴坐标,第二列为数据。

<?php
############################################################
#***** Counters        *****#
#***** Writed by Amy        *****#
#***** Program at 2003年1月28日      *****#
############################################################

//提交图片文件信息头
Header("Content-type:image/png");

//宏定义,预先定义好打印文字的左边距ML的值为40

define("ML",40); //left margin

$imgh=200;
$imgw=800;
$all_input=array();
$value=array();
$label=array();
$every_line=array();
//$x_grad=31;
$file_name="DS.txt";

//读出计数器的值
$fp=fopen($file_name,"r");                       
$all_input=file($file_name);
fclose($fp);

$x_grad=count($all_input)-1;

//将数据转化成数组的格式输出

for($i=0;$i<=$x_grad;$i++)
{
$every_line=explode(",",$all_input[$i]);
$label[$i]=$every_line[0];
//$value[$i]=$every_line[1];
$value[$i]=substr ( $every_line[1], 0, strlen($every_line[1])-2);
}


//找出最大的访问量
$max=intval($value[0]);
$str=$value[0];
for($i=1;$i<=$x_grad;$i++)
{
$str.=",$value[$i]";
if($max<=intval($value[$i]))
$max=intval($value[$i]);
}

//$fp=fopen($file_name,"w");
//fputs($fp,$str);
//fclose($fp);

//创建图形
$img=ImageCreate($imgw+1,$imgh*2+1);

//分配颜色
$white=ImageColorAllocate($img,255,255,255);
$black=ImageColorAllocate($img,0,0,0);
$red=ImageColorAllocate($img,255,0,0);
$grey=ImageColorAllocate($img,99,99,99);
$blue=ImageColorAllocate($img,0,0,255);
$textcolor3=ImageColorAllocate($img,100,10,50);
$green=ImageColorAllocate($img,0,150,55);

//画表头
ImageString($img,5,ML*5,ML-30,"Chart",$red);

//画边框
ImageRectangle($img,0,0,$imgw,$imgh*1.4,$black);

//画横坐标
ImageLine ( $img, ML, $imgh, $imgw-ML, $imgh, $black);
ImageString($img,3,$imgw-ML,$imgh+30,"TX",$blue);

//画纵坐标
ImageLine ( $img, ML, ML, ML, $imgh, $black);
ImageString($img,3,ML-10,ML-30,"TY",$blue);

//画纵坐标刻度
$max=intval($max/10)*10+10;

for($i=1;$i<=$max/10;$i++)
{
$y=$imgh-$i*($imgh-ML)/$max*10;

ImageLine ( $img, ML,$y, $imgw-ML, $y, $black);
ImageString($img,3,ML-25,$y-7,$i*10,$black);
}

//按比例输出直方图
$sum=0;

for($i=0;$i<=$x_grad;$i++)
{
$x=ML*1.5+$i*28;
$y=$imgh-$value[$i]*(($imgh-ML)/$max);

ImageFilledRectangle($img,$x,$y,$x+6,$imgh,$green);
ImageString($img,3,$x-5,$imgh+6,$label[$i],$black);
ImageString($img,2,$x-1,$y-12,$value[$i],$green);
$sum+=$value[$i];
}

//添加说明文字
ImageString($img,3,10,$imgh+30,"Total:$sum",$blue);

//生成图像,清除内存
ImagePNG($img);
ImageDestroy($img);
?>

返回顶部 ^