用户
 找回密码
 入住 CI 中国社区
搜索
查看: 13781|回复: 13
收起左侧

[库 Library] 在CI中使用pChart库

  [复制链接]
发表于 2009-8-14 10:25:39 | 显示全部楼层 |阅读模式
本帖最后由 yinzhili 于 2009-8-14 10:57 编辑

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,代码如下:

PHP复制代码
<?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;  //返回文件名
    }
}
复制代码


控制器:

PHP复制代码
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);
}
复制代码


视图:test_view.html

HTML复制代码
<html>
<head><title></title></head>
<body>
<img src="<?php echo $baseurl.$chart_image;?>" />
</body>
</html>
复制代码


最终生成的图表是这样的:
test_image.png
 楼主| 发表于 2009-8-14 10:52:49 | 显示全部楼层
关于pChart的更多用法,请参考它的在线文档:
http://pchart.sourceforge.net/documentation.php
发表于 2010-6-5 11:37:30 | 显示全部楼层
pChart下载不了,能放个附件上不吗?
发表于 2010-6-5 17:32:58 | 显示全部楼层
不错的类库,也准备使用.
发表于 2010-6-5 23:10:33 | 显示全部楼层
PCHART不错,做个标记
发表于 2010-6-15 17:12:03 | 显示全部楼层
怎么不好使,好象文件路径有问题,有没有调通的
发表于 2010-7-14 16:32:17 | 显示全部楼层
好文章,收藏一下
发表于 2010-7-22 17:06:54 | 显示全部楼层
老出问题,这个怎么回事呢


A PHP Error was encountered

Severity: Warning

Message: imageftbbox() [function.imageftbbox]: Invalid font filename

Filename: pChart/pChart.class

Line Number: 556
发表于 2010-7-23 08:54:39 | 显示全部楼层
mark, thx!
发表于 2010-11-1 10:59:05 | 显示全部楼层
例子测试结果:
报表可以正常生成,
但是有代码错误提示:pData.class 文件 第126行 Uninitialized string offset: 0
pchart_126_error.gif
解决办法:
修改 pData.class 文件 第126行
修改后代码如下:
for($i=0;$i<=count($this->Data);$i++)
     {
             if(is_array($this->Data) && isset($this->Data[$i][$Serie]))
             {
                     $ID = $i+1;
             }
     }
pchart_126_error.gif

本版积分规则