怎么样用php做较大量数据的统计并且绘出图表 对于数据库来说,数据量的大小不是什么障碍,关键是动态地生成图表.生成图表的例子到处都是,在运行生成图表的程序之前,你的PHP需要一个GD库 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 現在的php版本都帶有GD庫,只要把php.ini中;extension=php_gd.dll前的;去掉就行了。不過要生成gif圖片的話,就要去下載專門的php_gif_gd.dll,因爲gif格式的圖片是有版權的。 <?//由flag变量来控制显示哪一组数据/* 函数说明 $data1:y轴数据(数组)$data2:y轴数据(数组) $graphdata:y轴数据--百分比(数组) $label:x轴数据(数组) $height:图像高度 $width:图像宽度 $font:字号 $dot:决定点的大小 $bg:背景色 $line1 :线色1 $line2:线色2$line;线色$text :文本色 $dotcolor:点色 $file:输出图像文件名 */ $data1=array(33,433,34,434,33,2,1,55);$data2=array(343,33,2434,33,33,22,33);$limit1=count($data1);for($i=0;$i<$limit1;$i++){ $s=$s+$data1[$i];} //进行统计和$sfor($i=0;$i<$limit1;$i++){ $graphdata1[$i]=ceil(($data1[$i]/($s+1))*100);} //计算百分比$limit2=count($data2);for($i=0;$i<$limit2;$i++){ $s=$s+$data2[$i];} //进行统计$sfor($i=0;$i<$limit2;$i++){ $graphdata2[$i]=ceil(($data2[$i]/($s+1))*100);} //计算百分比for($i=1;$i<500;$i++){$label[]=$i;}//$label=array(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,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52);//图像尺寸$font=2;//字体大小(1-5))$dot=5;//点大小$bg=array(0,0,0);//背景色$line=array(0,255,255);$line1=array(250,250,100);//线色1$line2=array(250,250,250);//线色2$text=array(255,255,255);//文本色$dotcolor=array(250,255,255);//点色xianxingtu($data1 , $data2, $graphdata1, $graphdata2 , $label, $height, $width , $font, $dot, $bg, $line, $line1, $line2, $text, $dotcolor, $file) ;//引用函数function xianxingtu($data1 , $data2, $graphdata1, $graphdata2, $label , $height, $width , $font, $dot, $bg, $line, $line1, $line2, $text, $dotcolor, $file) { $jc=$height/100; $fontwidth= imagefontwidth ($font); $fontheight=imagefontheight($font); //定义宽高$image= imagecreate ($width,$height+20); //创建图像$bg= imagecolorallocate($image ,$bg[0],$bg[1],$bg[2]); $line=imagecolorallocate($image ,$line[0],$line[1],$line[2]); $line1=imagecolorallocate($image ,$line1[0],$line1[1],$line1[2]); $line2=imagecolorallocate($image ,$line2[0],$line2[1],$line2[2]); $text=imagecolorallocate($image ,$text[0],$text[1],$text[2]); $dotcolor=imagecolorallocate($image ,$dotcolor[0],$dotcolor[1],$dotcolor[2]);//设定颜色 imageline ($image,0,0,0,$height,$line); //绘一条从(00)到(0高)的线imageline($image,0,$height,$width,$height,$line); //绘一条从(0高)到(宽高)的线for ($i=1;$i<11;$i++) { imagedashedline($image,0,$height - $jc*$i*10 ,$width ,$height -$jc*$i*10 ,$line); imagestring ($image,$font,0,$height-$jc*$i*10,$i*10,$text); } //此函数划虚线并以$font字号把图像平均分成十分,标上文字for ($i=0;$i<count($data1);$i++){ #echo $tmp."<BR>"; $x1=(($width-50)/count($data1))*($i)+40; #echo $x1 ."<BR>"; $y1=$height-$graphdata1[$i]*$jc; $x2=$x1; $y2=$y1+$graphdata1[$i]*$jc; #echo $y1."<BR>"; imagestring($image, $font, $x1, $y1-2*$fontheight, $data1[$i] , $text); imagearc ($image, $x1, $y1, $dot, $dot, 0 , 360, $dotcolor); //画椭圆 imagefilltoborder($image, $x1, $y1, $dotcolor, $dotcolor);//填充 imagestring($image, $font, $x1, $y2, $label[$i], $text); if ($i>0) { imageline($image, $tmpx1, $tmpy1, $x1, $y1, $line1); } $tmpx1=$x1;$tmpy1=$y1; } for ($i=0;$i<count($data2);$i++){ #echo $tmp."<BR>"; $x1=(($width-50)/count($data2))*($i)+40; #echo $x1 ."<BR>"; $y1=$height-$graphdata2[$i]*$jc; $x2=$x1; $y2=$y1+$graphdata2[$i]*$jc; #echo $y1."<BR>"; imagestring($image, $font, $x1, $y1-2*$fontheight, $data2[$i] , $text); imagearc ($image, $x1, $y1, $dot, $dot, 0 , 360, $dotcolor); //画椭圆 imagefilltoborder($image, $x1, $y1, $dotcolor, $dotcolor); imagestring($image, $font, $x1, $y2, $label[$i], $text); if ($i>0) { imageline($image, $tmpx1, $tmpy1, $x1, $y1, $line2); } $tmpx1=$x1;$tmpy1=$y1; } imagejpeg ($image); } 线性图图示;只是思路,没有测试; 呵呵,guyanduzui(孤雁独醉西楼下)。我喜欢你上面的代码,谢谢关注,这样的代码有助于我项目的进度。过两天结贴了。各位都有高分~!希望有更好办法的或者有好的思路的请写下。 求个分词源码 火狐浏览器为什么不能用js调用xml 老年新手 请教DIV布局问题 PHP中如何实现 服务器端调用执行客户端程序 为什么我的cookie不能跨页显示? 调用word 报错 说拒绝访问! 迷糊中 查询语句中可否用php变量????? 一个笨问题 帮忙看看 怎么会一直显示暂无内容 请教,如何删除SESSION中的值? 哪里有在线电影系统的源程序下载
//由flag变量来控制显示哪一组数据
/*
函数说明
$data1:y轴数据(数组)
$data2:y轴数据(数组)
$graphdata:y轴数据--百分比(数组)
$label:x轴数据(数组)
$height:图像高度
$width:图像宽度
$font:字号
$dot:决定点的大小
$bg:背景色
$line1 :线色1
$line2:线色2
$line;线色
$text :文本色
$dotcolor:点色
$file:输出图像文件名
*/
$data1=array(33,433,34,434,33,2,1,55);
$data2=array(343,33,2434,33,33,22,33);$limit1=count($data1);
for($i=0;$i<$limit1;$i++){
$s=$s+$data1[$i];
} //进行统计和$s
for($i=0;$i<$limit1;$i++){
$graphdata1[$i]=ceil(($data1[$i]/($s+1))*100);
} //计算百分比
$limit2=count($data2);
for($i=0;$i<$limit2;$i++){
$s=$s+$data2[$i];
} //进行统计$s
for($i=0;$i<$limit2;$i++){
$graphdata2[$i]=ceil(($data2[$i]/($s+1))*100);
}
//计算百分比
for($i=1;$i<500;$i++){
$label[]=$i;
}
//$label=array(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,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52);
//图像尺寸
$font=2;//字体大小(1-5))
$dot=5;//点大小
$bg=array(0,0,0);//背景色
$line=array(0,255,255);
$line1=array(250,250,100);//线色1
$line2=array(250,250,250);//线色2$text=array(255,255,255);//文本色
$dotcolor=array(250,255,255);//点色
xianxingtu($data1 ,
$data2,
$graphdata1,
$graphdata2 ,
$label,
$height,
$width ,
$font,
$dot,
$bg,
$line,
$line1,
$line2,
$text,
$dotcolor,
$file) ;//引用函数function xianxingtu($data1 ,
$data2,
$graphdata1,
$graphdata2,
$label ,
$height,
$width ,
$font,
$dot,
$bg,
$line,
$line1,
$line2,
$text,
$dotcolor,
$file)
{
$jc=$height/100;
$fontwidth= imagefontwidth ($font);
$fontheight=imagefontheight($font); //定义宽高$image= imagecreate ($width,$height+20); //创建图像
$bg= imagecolorallocate($image ,$bg[0],$bg[1],$bg[2]); $line=imagecolorallocate($image ,$line[0],$line[1],$line[2]); $line1=imagecolorallocate($image ,$line1[0],$line1[1],$line1[2]);
$line2=imagecolorallocate($image ,$line2[0],$line2[1],$line2[2]);
$text=imagecolorallocate($image ,$text[0],$text[1],$text[2]);
$dotcolor=imagecolorallocate($image ,$dotcolor[0],$dotcolor[1],$dotcolor[2]);//设定颜色
imageline ($image,0,0,0,$height,$line); //绘一条从(00)到(0高)的线
imageline($image,0,$height,$width,$height,$line); //绘一条从(0高)到(宽高)的线
for ($i=1;$i<11;$i++) {
imagedashedline($image,0,$height - $jc*$i*10 ,$width ,$height -$jc*$i*10 ,$line);
imagestring ($image,$font,0,$height-$jc*$i*10,$i*10,$text);
} //此函数划虚线并以$font字号把图像平均分成十分,标上文字
for ($i=0;$i<count($data1);$i++){
#echo $tmp."<BR>";
$x1=(($width-50)/count($data1))*($i)+40;
#echo $x1 ."<BR>";
$y1=$height-$graphdata1[$i]*$jc;
$x2=$x1;
$y2=$y1+$graphdata1[$i]*$jc;
#echo $y1."<BR>";
imagestring($image, $font, $x1, $y1-2*$fontheight, $data1[$i] , $text);
imagearc ($image, $x1, $y1, $dot, $dot, 0 , 360, $dotcolor); //画椭圆
imagefilltoborder($image, $x1, $y1, $dotcolor, $dotcolor);//填充
imagestring($image, $font, $x1, $y2, $label[$i], $text);
if ($i>0) {
imageline($image, $tmpx1, $tmpy1, $x1, $y1, $line1);
} $tmpx1=$x1;$tmpy1=$y1;
}
for ($i=0;$i<count($data2);$i++){
#echo $tmp."<BR>";
$x1=(($width-50)/count($data2))*($i)+40;
#echo $x1 ."<BR>";
$y1=$height-$graphdata2[$i]*$jc;
$x2=$x1;
$y2=$y1+$graphdata2[$i]*$jc;
#echo $y1."<BR>";
imagestring($image, $font, $x1, $y1-2*$fontheight, $data2[$i] , $text);
imagearc ($image, $x1, $y1, $dot, $dot, 0 , 360, $dotcolor); //画椭圆
imagefilltoborder($image, $x1, $y1, $dotcolor, $dotcolor);
imagestring($image, $font, $x1, $y2, $label[$i], $text);
if ($i>0) {
imageline($image, $tmpx1, $tmpy1, $x1, $y1, $line2);
}
$tmpx1=$x1;$tmpy1=$y1;
}
imagejpeg ($image);
} 线性图图示;
只是思路,没有测试;