因为一个codeigniter开发的项目上要用到图表。FusionChart是flash技术,在某些情况下可能造成无法使用(如ipad)。因此不禁想起了之前用Pchart做的图表项目。
但是毕竟是在CI里,有时候为了吻合框架的特性,不得不去迁就而修改自己的代码。
最初我的想法是把Pchart的类文件放在libraries文件里,然后在controllers控制器里调用,可以总是出现各种错误。尝试了很多次都是失败,难道在CI里用Pchart这么难?!!!
于是去百度+谷歌上去找相关的资料。找到了N多篇相同的标题为“在CI中使用pChart库”这类的文章,并且内容都95%惊人的相似。看来世界的确是大同了,思想都一样了(不太喜欢贴别人文章不表明转载的,人家博主写篇文章多费劲啊,你这得了便宜还卖乖,粘贴下成自己的了。).
好吧,看下思路,大致是在libraries里多创建一个类,来调用Pchart的类,进而达到使用目的。不知道大伙有没有测试,不过我这边测试的时候总有问题,于是心里很着急,又尝试了很多次,还是失败。于是就想自己写算了。不过还是运用了网络上文章的思路。即把Pchart类包放置于libraries下。但是调用类中的方法确实自己运用之前非CI框架下的方法。
目录架构类似于这样:
--demoweb
--application
--....
--libraries
--pChart
--pChart的众类文件
--Mychart.php
--...
--system
个人是把字体都和Pchart的类文件都放在pChart这个目录里的。等下看代码的时候大家就会注意到了。
下面贴出来Mychart.php(即调用的pchart的类文件),以及控制器里方法的测试示例代码:
Mychart.php示例代码:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* FOR:调用pchart类绘制图表
* @author cheng.yafei
* @version 1.0
**/
class Mychart {
/**
* FOR:画图,立体饼图
* @param $dataArray 详细票数数组
* @param $reportArr 详细票数对应选项数组
**/
function draw3DPieImage($dataArray, $lableArray)
{
include(dirname(__FILE__)."/pChart/pData.class");
include(dirname(__FILE__)."/pChart/pChart.class");
$datanum = $dataArray;
$dataname = $lableArray;
// Dataset definition
$DataSet = new pData;
$DataSet->AddPoint($datanum,"Serie1");
$DataSet->AddPoint($dataname,"Serie2");
$DataSet->AddAllSeries();
$DataSet->SetAbsciseLabelSerie("Serie2");
$Test = new pChart(420,220);
$Test->drawFilledRoundedRectangle(7,7,415,213,5,240,240,240);//灰色圆角背景
$Test->drawRoundedRectangle(5,5,417,215,5,230,230,230);//灰色圆角框
// Draw the pie chart
$Test->setFontProperties(dirname(__FILE__)."/pChart/yahei.ttf",8);
$Test->drawPieGraph($DataSet->GetData(),$DataSet->GetDataDescription(),150,90,110,PIE_PERCENTAGE,TRUE,50,20,5);
$Test->drawPieLegend(310,15,$DataSet->GetData(),$DataSet->GetDataDescription(),250,250,250);
$totalStr = '(共'.array_sum($datanum).'票)';
$Test->drawTitle(20,20,$totalStr,50,50,50,380);//标题;drawTitle(20,20,参数名,50,50,50,380) 20左边距,
$rand = rand(100,300);
$image_name = $rand.'_3dpie.png';
$image_file_name = dirname(dirname(dirname(__FILE__))).'/actpic/'.$image_name;
$Test->Render($image_file_name);
// header("content-type:text/html;charset=utf-8;");
echo dirname(dirname(dirname(__FILE__))).'/actpic'."<br>";
echo "<h3>饼图:</h3><img src='http://localhost/repaction/actpic/".$image_name."'><br>";
}//end function draw3DPieImage 立体饼图
/*******************************
* FOR:画图,分离的饼图
* @param $dataArray 详细票数数组
* @param $reportArr 详细票数对应选项数组
********************************/
function drawDepartPieImage($dataArray, $lableArray)
{
include(dirname(__FILE__)."/pChart/pData.class");
include(dirname(__FILE__)."/pChart/pChart.class");
$datanum = $dataArray;
$dataname = $lableArray;
// Dataset definition
$DataSet = new pData;
$DataSet->AddPoint($datanum,"Serie1");//投票数字
$DataSet->AddPoint($dataname,"Serie2");//对应文本
$DataSet->AddAllSeries();
$DataSet->SetAbsciseLabelSerie("Serie2");
// Initialise the graph
$Test = new pChart(370,220);//(长,宽)画布长宽
$Test->drawFilledRoundedRectangle(7,7,353,213,5,240,240,240);//灰色圆角背景
$Test->drawRoundedRectangle(5,5,355,215,5,230,230,230);//灰色圆角框
// Draw the pie chart
$Test->setFontProperties(dirname(__FILE__)."/pChart/yahei.ttf",8);
$Test->AntialiasQuality = 0;
$Test->drawFlatPieGraph($DataSet->GetData(),$DataSet->GetDataDescription(),120,100,60,PIE_PERCENTAGE,10);//画饼图
$Test->drawPieLegend(230,15,$DataSet->GetData(),$DataSet->GetDataDescription(),250,250,250);//画选项图
$totalStr = '(共'.array_sum($datanum).'票)';
$Test->drawTitle(20,20,$totalStr,50,50,50,380);//标题;drawTitle(20,20,参数名,50,50,50,380) 20左边距,
$rand = rand(100,300);
$image_name = $rand.'_departpie.png';
$image_file_name = dirname(dirname(dirname(__FILE__))).'/actpic/'.$image_name;
$Test->Render($image_file_name);
echo "<h3>离散饼图:</h3><img src='http://localhost/repaction/actpic/".$image_name."'><br>";
}// end drawDepartPieImage
/*******************************
* FOR:画图,柱状图
* @param $dataArray 详细票数数组
* @param $reportArr 详细票数对应选项数组
********************************/
function drawBarImage($dataArray, $lableArray)
{
include(dirname(__FILE__)."/pChart/pData.class");
include(dirname(__FILE__)."/pChart/pChart.class");
// Dataset definition
$DataSet = new pData;
foreach($dataArray as $k=>$v){
$DataSet->AddPoint($v, "Serie".$k);
$DataSet->SetSerieName($lableArray[$k], "Serie".$k);
}
$DataSet->AddAllSeries();
$DataSet->SetAbsciseLabelSerie();
// Initialise the graph
$Test = new pChart(700,230);
$Test->setFontProperties(dirname(__FILE__)."/pChart/yahei.ttf",8);
$Test->setGraphArea(50,30,550,200);
$Test->drawFilledRoundedRectangle(7,7,693,223,5,240,240,240);
$Test->drawRoundedRectangle(5,5,695,225,5,230,230,230);
$Test->drawGraphArea(255,255,255,TRUE);
$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,150,150,150,TRUE,0,2,TRUE);
$Test->drawGrid(4,TRUE,230,230,230,50);
// Draw the 0 line
$Test->setFontProperties(dirname(__FILE__)."/pChart/yahei.ttf",6);
$Test->drawTreshold(0,143,55,72,TRUE,TRUE);
// Draw the bar graph
$Test->drawBarGraph($DataSet->GetData(),$DataSet->GetDataDescription(),TRUE);
// Finish the graph
$Test->setFontProperties(dirname(__FILE__)."/pChart/yahei.ttf",8);
// $Test->drawLegend(596,150,$DataSet->GetDataDescription(),255,255,255);
$Test->drawLegend(580,30,$DataSet->GetDataDescription(),255,255,255);//(左边距,上边距,描述....)
$Test->setFontProperties(dirname(__FILE__)."/pChart/yahei.ttf",10);
$Test->drawTitle(50,22,"投票",50,50,50,585);
$rand = rand(100,300);
$image_name = $rand.'_zhuzhuang.png';
$image_file_name = dirname(dirname(dirname(__FILE__))).'/actpic/'.$image_name;
$Test->Render($image_file_name);
echo "<h3>离散饼图:</h3><img src='http://localhost/repaction/actpic/".$image_name."'><br>";
}//end function drawBarImage 柱状图
}//END class
然后再在控制器的方法里调用这个类使用:
function test(){
$this->load->library('mychart'); //载入pChart库
$dataArray = array('54','95','158','241','19');
$lableArray = array('成龙','施瓦辛格','龙格尔','史泰龙','李连杰');
$this->mychart->draw3DPieImage($dataArray,$lableArray);
}//end function
function test2(){
$this->load->library('mychart'); //载入pChart库
$dataArray = array('555','95','158','241','19');
$lableArray = array('黄家驹','平克弗洛伊德','谭咏麟','张学友','刘德华');
$this->mychart->drawDepartPieImage($dataArray,$lableArray);
}//end function
function test3(){
$this->load->library('mychart'); //载入pChart库
$dataArray = array('369','95','158','241','19');
$lableArray = array('黄家驹','平克弗洛伊德','谭咏麟','张学友','刘德华');
$this->mychart->drawBarImage($dataArray,$lableArray);
}//end function
测试代码,稍显凌乱。需要的可以测试下。知识就是共享的。如果有问题的话可以在下面回复提问。
请注意使用的时候,一定注意写对调用字体文件的路径。
分享到:
相关推荐
3. **颜色管理**:pChart允许用户自定义颜色主题,通过设置颜色代码或使用内置的颜色方案,为图表添加个性化风格。 4. **数据处理**:pChart可以接收数组形式的数据,并自动进行处理,如数据归一化、极值检测等,...
pChart是一个开源的图表生成库,主要涉及3个Class:pChart.class, pData.class, pCache.class,可生成20多种简单或复杂的图表,支持PNG,JPG,GIF通用图片格式。数据源可以来自于Database,CSV,当然也可以手写
1. **下载与安装**:你可以从官方仓库或者通过GitHub下载Pchart的最新版本,例如本例中的pChart2.1.4。下载后,将文件解压到你的项目目录下,然后通过`require_once`或`include`引入相应的类文件,如`class.pData....
如果项目中使用了会话(sessions),确保在引入类库之前初始化会话,以避免出现“无法发送会话 cookie - 头部信息已发送”的错误。 ##### 2. 准备数据集 在创建图表之前,需要准备数据集。`pChart` 提供了多种方式...
3. **绘制图表**:使用 `drawFilledRoundedRectangle()`、`drawRoundedRectangle()` 绘制矩形,`drawGraphArea()` 绘制图表区域,`drawScale()` 绘制坐标轴和刻度,`drawGrid()` 绘制网格线。此外,还可以通过 `...
在提供的压缩包文件中,我们可以看到一系列的示例文件,例如 `Example15.php`、`Example18.php` 等,这些都是用来演示如何使用pChart库创建不同类型的图表。每个示例文件都包含了编写代码以生成特定图表的步骤,这...
c-pchart, 将Composer支持和PSR标准引入 pChart 2.0库的项目 目录:...安装工具使用情况通过图像类创建的图表独立图表条码缓存字体和palletes属性变更日志文件引用链接支持:这个项目以基本的方式支持,不会引入新的特
虽然GD库本身没有直接提供绘制图表的函数,但开发者可以通过像素级操作来实现基本的绘图功能,比如绘制直线、矩形、圆形等,从而构建出图表的基本元素。 不过,对于大多数开发者来说,使用专门的图表库,如pChart,...
pChart是一个基于GD library(图形处理函数库)开发的PHP图表制作开源项目。 支持多种图表类型包括: •Line chart •Cubic curve chart •Plot chart •Bar chart •Filled line chart •Filled cubic ...
沙箱和所有示例均按预期工作。... 主要变化: 代码清理自举例外情况推出了pColor和pColorGradient 移动功能在PNG输出中增加了对压缩和过滤器的支持缓存:添加了PDO SQLite存储选项ImageMapper:使用jQuery重新编
通过300个实例的学习,开发者可以深入理解`jpgraph`库的使用,从基础的图表绘制到复杂的定制化设置,从而在实际项目中游刃有余地创建出满足需求的曲线图。这些实例涵盖了各种实际场景,如销售数据分析、股票走势展示...
FusionCharts是一个Flash的图表组件,它可以用来制作数据动画图表,其中动画效果用的是Adob e Flash 8 (原Macromedia Flash的)制作的flash , FusionCharts可用于任何网页的脚本语言类似于HTML , .NET,ASP , ...
在Maple或类似软件中,可以使用`ProcessControl[CChart]`命令绘制C图,并计算控制限,以判断过程是否偏离预期。 2. **U图**: U图,或称单位缺陷图,关注的是每批产品中的总缺陷数。与C图不同,U图不考虑每个产品...
通过研究这些示例文件,开发者不仅可以掌握pChart的基本用法,还能深入理解如何在实际项目中灵活运用,创建出满足需求的、具有吸引力的数据可视化图表。同时,这也涉及到数据处理、前端交互以及优化等多方面技能的...
动态绘制图表需要通过编程控制,例如在运行时改变数据源、更新图表样式等。这通常涉及设置属性值、调用方法以及处理控件的事件。 7. **使用示例** 以下是一个简单的示例,展示如何使用CMSChart类来设置数据并刷新...
首先,为了在VC++中使用MSChart,你需要确保已经安装了相应的库和组件。如果你使用的是Visual Studio,可以通过添加对Microsoft Chart Controls的引用来完成。如果是在较旧的版本中,可能需要下载并安装Microsoft ...
- **创建图表实例**:通过`C_PhpChartX`类创建一个新的图表实例,并指定数据集。 - **绘制图表**:调用`draw()`方法来显示图表。 示例代码如下: ```php require_once("../conf.php"); $pc = new C_PhpChartX...
除了`libchart`之外,PHP社区还提供了许多其他图表库,比如`pChart`、`Google Charts API`、`Chart.js`(通过JavaScript与PHP结合使用)等,它们各有特点和优势,可以根据项目需求选择合适的工具。 总的来说,PHP...