免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1048 | 回复: 0
打印 上一主题 下一主题

php生成html统计图 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-29 16:54 |只看该作者 |倒序浏览

/****************************************************************************
|    @Author:    etng
|    @Email:        etng2004[at]gmail.com etng2004[at]hotmail.com
|    @QQ:        35605690
|    @WangWang:    etng
|    @Homepage:    http://www.etng.net/
@FileName        :    draw.bar.php
@Description    :    生成统计图
@CreateTime        :    2004-12-10
@LastModify        :    2004-12-10
@Version        :    1.0beta
@Copyright        :    etng.net
|
|            做一个快乐的CODER!    PHP = Programme Help Perfect!
|
****************************************************************************/
header("Content-Type:text/html; charset=utf-8");
header("Content-Language:utf-8");
?>
=    new bar(200,15,5);
$pair    =    $arr=array(
                        '1月'    =>    250,
                        '2月'    =>    370,
                        '3月'    =>    621,
                        '4月'    =>    720,
                        '5月'    =>    326,
                        '6月'    =>    455,
                        '7月'    =>    132,
                        '8月'    =>    345,
                        '9月'    =>    611,
                        '10月'    =>    126,
                        '11月'    =>    551,
                        '12月'    =>    266
                        );
$bar->setData($pair);
echo "月平均销售额,单位:(万元)";
$bar->draw();
echo "月平均销售额,单位:(万元)";
$bar->draw(false);
echo "调试数据如下:";
echo "";
var_dump($bar);
echo "";
?>
/*
@柱状统计图
*/
class bar
{
    //颜色, 默认为20种, 如果客户数据超过20种, 则回到第一种, 如此循环.
    var $color    =    array(
                        '#97bd00','#009900','#cc3300',
                        '#ffcc00','#3366cc','#33cc33',
                        '#ff9933','#cccc99','#99cc66',
                        '#66ff99','#4f6600','#003300',
                        '#481000','#7d6400','#173064',
                        '#1a6a1a','#974b00','#78793c',
                        '#557e27','#009337'
                        );
    var $total    =    399;
    var $per    =    25;
    //柱与柱之间的间隔
    var $space    =    5;
    var $max    =    0;
    /*
    构造函数
    */
    function bar($T=399 ,$P=25 ,$S=5)
    {
            $this->total        = $T;//总高度或者宽度
            $this->per            = $P;//单元高度或者宽度
            $this->space        = $S;//各柱间隔
    }
    /*
    给出具体数据
    */
    function setData($pair)
    {
        $this->DATA        =    $pair;
        $values            =    array_values($pair);
                            asort($values);
        $this->max        =    array_pop($values);
    }
    function draw($H=true)
    {
        $H?$this->drawH():$this->drawV();
    }
    function drawH(){
        $cntColor=count($this->color);
        $i=0;
?>
  echo $this->space; ?>">
    foreach($this->DATA as $k=>$v){
            $curColor = $this->color[($i++)%$cntColor];
    ?>
  
    echo  /*打印左边标签*/ $k; ?>
   
   echo $this->per; ?>">
     
       echo floor(($this->total/$this->max)*$v);?>" bgstyle="color: /*柱状颜色*/ echo $curColor; ?>">
        /*在柱状图的顶端输出数值*/ echo $v; ?>
     
   
   
  
}
?>
  }//end function
    function drawV(){
        $cntColor=count($this->color);
        $i=0;
?>
   
    /*一定要设置为低部对齐*/ ?>
foreach($this->DATA as $k=>$v){
            $curColor = $this->color[($i++)%$cntColor];
?>
   
/*在柱状图的顶端输出数值*/
            echo $v;
?>
        echo floor(($this->total/$this->max)*$v);?>" border=0>
        
        /*柱状颜色*/ echo $curColor; ?>" width="/*第条柱的宽度*/ echo $this->per; ?>">
         
      /*打印低部对应标签*/ echo $k;?>
      
}//end for
?>
   
  
  }//end function
}//end class
?>
;
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/16928/showart_207846.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP