在CodeIgniter中使用pChart
pChart是一个免费的PHP图表生成库,可以生成多种图表如饼图或者柱状图等等,需要GD库的支持。下面我来简单讲讲如何在CI中方便地使用它。
首先我们要下载pChart。访问http://pchart.sourceforge.net/download.php 就可以下载到最新版的pChart,目前最新的版本是1.27。解压下载到的文件,我们要用到的只是其中的pChart文件夹,里面有pChart.class、pCache.class和pData.class这三个文件。我们把pChart文件夹复制到 application/libraries/ 下面。
然后要准备字体,因为我们做报表很可能要输出中文,所以必须使用一种中文字体,至于选什么字体就看你的喜好了(如果是商业用途的话请注意字体的版权以免引起版权纠纷),把中文字体的ttf文件复制到 application/libraries/pChart 下面即可。
通过库的形式来使用pChart,因此在 application/libraries/ 下面创建一个文件,命名为 Chart.php,代码如下:
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 | < ?php class Chart { function Chart() { include(APPPATH."libraries/pChart/pData.class"); include(APPPATH."libraries/pChart/pChart.class"); } function draw_line_graph($params) { $DataSet = new pData; $DataSet->AddPoint($params['data'],"Serie1"); //需要显示的数据 $DataSet->AddPoint($params['date'],"Serie2"); //横坐标的数据 $DataSet->AddSerie("Serie1"); $DataSet->SetAbsciseLabelSerie("Serie2"); $DataSet->SetSerieName("订单总金额","Serie1"); $DataSet->SetYAxisName("RMB"); //纵坐标上显示的文字 $DataSet->SetXAxisName('横坐标:日期'); //横坐标上显示的文字 $DataSet->SetXAxisFormat("date"); //横坐标的数据类型 $Test = new pChart($params['height'],$params['width']); //图表文件的高度和宽度 $Test->setDateFormat($params['date_format']); //横坐标显示的日期格式 $Test->setColorPalette(0,255,0,0); $Test->setFontProperties(APPPATH."libraries/pChart/FZLTXIHK.ttf",12); //设置使用的字体及字号 $Test->setGraphArea(60,60,$params['x_area'],$params['y_area']); //图形区域的高度和宽度 $Test->drawGraphArea(252,252,252); //线的颜色 $Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,150,150,150,TRUE,0,2); $Test->drawGrid(4,TRUE,230,230,230,255); $Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription()); $Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),3,2,255,255,255); $Test->setFontProperties(APPPATH."libraries/pChart/FZLTXIHK.ttf",8); //设置数据值所用字体及字号 $Test->writeValues($DataSet->GetData(),$DataSet->GetDataDescription(),"Serie1"); //输出每个点的数据值 $Test->setFontProperties(APPPATH."libraries/pChart/FZLTXIHK.ttf",11); //设置使用的字体及字号 $Test->drawLegend(75,65,$DataSet->GetDataDescription(),255,255,255); $Test->setFontProperties(APPPATH."libraries/pChart/FZLTXIHK.ttf",12); //设置使用的字体及字号 $Test->drawTitle(60,22,$params['title'],50,50,50,585); $imagefile='public/temp/'.$params['filename'].'.png'; //设置生成文件的保存路径 $Test->Render($imagefile); //生成文件 return $imagefile; //返回文件名 } } |
然后控制器中这样调用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | function test(){ $this->load->library('chart'); //载入pChart库 $params['data']=array(100,200,150,600,230,150,510); //要显示的数据 for($i=0;$i<7;$i++){ $params['date'][$i]=1250217066+$i*86400; //要显示的日期,注意这里是Unix时间戳,pChart会自动传换成你要的格式 } $params['title']='销售报表'; //图片标题 $params['date_format']='m月j日';//设置日期格式 $params['filename']='test_image'; //文件名 $params['height']=600; //高度 $params['width']=300; //宽度 $params['x_area']=560; //图形区域高度 $params['y_area']=280; //图形区域宽度 $data['chart_image']=$this->chart->draw_line_graph($params);//生成图片 $data['baseurl']=site_url(); $this->load->view('test_view.html',$data); } |
视图中输出就很简单了:
1 2 3 4 5 6 | <html> <head><title></title></head> <body> <img src="<?php echo $baseurl.$chart_image;?/>" /> </body> </html> |
关于pChart的更多用法,请参考它的在线文档:
http://pchart.sourceforge.net/documentation.php