最近做预约系统,为了整合Jpgraph函数弄了半天...
网站系统后台是用:Thinkphp3.2.3
Jpgraph版本:jpgraph-3.5.0b1
如下图所示类似效果~~
首先Jpgraph代码放到如下位置:
jpgraph.php和jpgraph_line.php加上 .class方便文件引用(jpgraph.class.php、jpgraph_line.class.php)
控制器YejiController.class.php:
public function draw(){ $patient=D("patient"); import("Org.Util.jpgraph.jpgraph"); import("Org.Util.jpgraph.jpgraph_line"); $frommounth = date("Y-m-01 00:00:00"); if(I('way') == '1'){ $map['yuyueren'] = array('eq',14); //14 车xx }else if(I('way') == '2'){ $map['yuyueren'] = array('eq',11); //11 王xx }else if(I('way') == '3'){ $map['yuyueren'] = array('eq',12); //王x }else if(I('way') == '4'){ $map['yuyueren'] = array('eq',13); //刘xx }else if(I('way') == '5'){ $map['yuyueren'] = array('eq',15); //邵xx } for($i = 1; $i <= date('d'); $i++){ if($i < 10){ $md[] = date("m").'-0'.$i; }else{ $md[] = date("m").'-'.$i; } } //dump($md);/*1234567 横坐标*/ $info1 = $patient->field("time1")->where($map)->where("time1>='%s' and time1<='%s'",array($frommounth,date("Y-m-d H:i:s")))->select();//预约时间 $info1Count=count($info1); $info2 = $patient->field("fenzhenshijian")->where($map)->where("fenzhenshijian>='%s' and fenzhenshijian<='%s'",array($frommounth,date("Y-m-d H:i:s")))->select();//分诊时间 $info2Count=count($info2); //预约 foreach($info1 as $k => $v){ if(!empty($v['time1']) && $v['time1']!='0000-00-00 00:00:00'){ $time1[] = date("m-d",strtotime($v['time1'])); } } //分诊 foreach($info2 as $k => $v){ if(!empty($v['fenzhenshijian']) && $v['fenzhenshijian']!='0000-00-00 00:00:00'){ $fenzhenshijian[] = date("m-d",strtotime($v['fenzhenshijian'])); } } $time1 = array_count_values($time1); //对数组中的所有值进行计数 (数组形式) $fenzhenshijian = array_count_values($fenzhenshijian); $time1 = isset($time1)?$time1:array(); //空 折线图 $fenzhenshijian = isset($fenzhenshijian)?$fenzhenshijian:array(); foreach($md as $v){ if(!array_key_exists($v,$time1)){//array_key_exists() 函数检查某个数组中是否存在指定的键名 $time1 = array_merge($time1,array($v=>'0')); } } foreach($md as $v){ if(!array_key_exists($v,$fenzhenshijian)){//array_key_exists() 函数检查某个数组中是否存在指定的键名 $fenzhenshijian = array_merge($fenzhenshijian,array($v=>'0')); } } ksort($time1);//对关联数组按照键名进行升序排序 ksort($fenzhenshijian); $time1=array_values($time1);//返回一个包含给定数组中所有键值的数组,但不保留键名。 $fenzhenshijian=array_values($fenzhenshijian); //$time1 = array_splice($time1,0,date('d')); //dump($time1); //dump($fenzhenshijian); //计算预约人数最大值 $appdatenum = $time1; sort($appdatenum,SORT_NUMERIC); $appdatenum = end($appdatenum); // echo $appdatenum; //计算到诊人数最大值 $dzdatenum = $fenzhenshijian; sort($dzdatenum,SORT_NUMERIC); $dzdatenum = end($dzdatenum); $topnum = array($appdatenum,$dzdatenum); sort($topnum,SORT_NUMERIC); $topnum = end($topnum); //设置直线图 //1 创建画布 $graph = new \Graph(1000,400); $graph->title->SetFont(FF_SIMSUN,FS_BOLD,14);//中文 //2.设置横纵坐标刻度样式 $graph->SetScale("textint",0,$topnum+1); //$graph->SetScale("textint"); //3,设置统计图的标题 if(I('way') == '1'){ $graph->title->Set(iconv("UTF-8","GB2312//IGNORE",date("Y-m").'车xx统计图')); }else if(I('way') == '2'){ $graph->title->Set(iconv("UTF-8","GB2312//IGNORE",date("Y-m").'王xx统计图')); }else if(I('way') == '3'){ $graph->title->Set(iconv("UTF-8","GB2312//IGNORE",date("Y-m").'王x统计图')); }else if(I('way') == '4'){ $graph->title->Set(iconv("UTF-8","GB2312//IGNORE",date("Y-m").'刘xx统计图')); }else if(I('way') == '5'){ $graph->title->Set(iconv("UTF-8","GB2312//IGNORE",date("Y-m").'邵xx统计图')); } //4.得到LinePlot对象 $linePlot=new \LinePlot($time1); //得到第二条曲线 $linePlot2y=new \LinePlot($fenzhenshijian); // 加入 x 轴标注 $graph->xaxis->SetTickLabels($md); //5,设置图例 $linePlot->SetLegend(iconv("UTF-8","GB2312//IGNORE",'预约人数('.$info1Count.')')); $linePlot2y->SetLegend(iconv("UTF-8","GB2312//IGNORE",'到诊人数('.$info2Count.')')); //6,将统计图添加到画布上 $graph->Add($linePlot); $graph->Add($linePlot2y); //$linePlot->value->SetFormatCallback("cbFmtPercentage");//设置数据显示格式 $linePlot->value->SetColor("red"); $linePlot->value->Show();//让具体数据在顶端显示出来 $linePlot->value->SetFormat('%d'); //人数显示格式 $linePlot2y->value->SetColor("#1DA848"); $linePlot2y->value->Show();//让具体数据在顶端显示出来 $linePlot2y->value->SetFormat('%d'); //人数显示格式 $graph->xaxis->title->SetFont(FF_SIMSUN,FS_BOLD); $graph->yaxis->title->SetFont(FF_SIMSUN,FS_BOLD); //设置三个坐标轴名称 $graph->xaxis->title->Set(iconv("UTF-8","GB2312//IGNORE",'日期')); $graph->yaxis->title->Set(iconv("UTF-8","GB2312//IGNORE",'人数')); //设置统计图的颜色,一定要在添加到画布之后再设置 $linePlot->SetColor('red'); $linePlot2y->SetColor('#1DA848'); //输出画布 if(I('way')){ $graph->Stroke(); } $this->display(); }视图模版文件draw.html:
<!doctype html> <html> <head> <meta charset="UTF-8"> <title>后台管理</title> <link rel="stylesheet" type="text/css" href="{$smarty.const.ADMIN_CSS_URL}/common.css"/> <link rel="stylesheet" type="text/css" href="{$smarty.const.ADMIN_CSS_URL}/main.css"/> </head> <body> {include file="Public/header.html"} <div class="container clearfix"> {include file="Public/left.html"} <div class="main-wrap"> <div class="crumb-wrap"> <div class="crumb-list"><i class="icon-font"> </i><a href="{$smarty.const.SITE_URL}">首页</a><span class="crumb-step">></span><span class="crumb-name">业绩图表</span></div> </div> <img src="{$smarty.const.__CONTROLLER__}/draw/way/1" /><br/><br/><br/> <img src="{$smarty.const.__CONTROLLER__}/draw/way/2" /><br/><br/><br/> <img src="{$smarty.const.__CONTROLLER__}/draw/way/3" /><br/><br/><br/> <img src="{$smarty.const.__CONTROLLER__}/draw/way/4" /><br/><br/><br/> <img src="{$smarty.const.__CONTROLLER__}/draw/way/5" /> </div> <!--/main--> </div> </body> </html>结束