pChart:强大的 PHP图表库

时间:2012-2-22     作者:smarteng     分类: PHP相关


pChart是一个开源的图表生成库,主要有3个Class:pChart.class、 pData.class、pCache.class,可生成20多种简单或复杂的图表,支持PNG、JPG、GIF通用图片格式。数据源可以来自于Database、CSV等。使用pChart需要开启PHP的GD服务。

pChart的工作流程主要分为三步:

  1. 读取用于生成图表数据(数据库、文件)
  2. 设计图表样式(圆角、底色等)
  3. 制作标签、题目、图例并生成图表

以下为一个简单的实例:

<?php
/*
     使用pchart画一个饼图的全过程
*/

// 载入图表类
include("../pChart/pchart/pData.class");
include("../pchart/pChart/pChart.class");

//准备好画图的数据
$arr1 = array(6,4,2,1); //饼图各板块数据
$arr2 = array('省级','市级','县级','乡镇');//数据的文字说明,和数据位置对应
  
//第一步 获得饼图数据
$data = new pdata;       //实例化数据类
$data->AddPoint($arr1,"serie1");//装入数据并命名为serie1
$data->AddPoint($arr2,"serie2");//装入说明并命名为serie2
$data->AddAllSeries();          //不明,应该是把数据提交到数据池里面
$data->SetAbsciseLabelSerie("serie2");   //设置标签

//第二步 画图形框架
$im = new pchart(420,1000); //创造一个画布并赋予尺寸
$im->drawFilledRoundedRectangle(7,7,413,243,5,240,240,240); //画圆角矩形(x1,y1,x2,y2,圆角半径,R,G,B),填充中间部份
$im->drawRoundedRectangle(5,5,415,245,5,230,230,230); //方法同上,这是画圆角矩形"框"的函数,中间不填充
$im->createColorGradientPalette(195,204,56,223,110,41,5); //控制饼图各版块颜色,在某一个范围内随机变化
//第三步 把数据导入画好的图形内
$im->setFontProperties("c://windows//fonts//Arialuni.ttf",8);//设置字体及大小,注意路径的写法
$im->AntialiasQuality = 0; //不明,字面意思:抗锯齿质量?
//下面是整页代码的核心部份,画一个3维饼图专用函数,共有11个参数
//$Data,饼图结构数据,从$data实例取得
//$DataDescription,数据参数,从$data实例取得
//$XPos,圆心的X坐标
//$YPos,圆心的Y坐标
//$Radius=100,半径
//$DrawLabels=PIE_NOLABEL,标签样式
// - PIE_NOLABEL 没标签(默认)
// - PIE_PERCENTAGE 百分比
// - PIE_LABELS 标签
// - PIE_PERCENTAGE_LABEL 百分比和标签
//$EnhanceColors=TRUE, 好像是边框渲染,但我看不出有什么效果
//$Skew=60,倾斜角度,比较美观的应该是在40-70之间
//$SpliceHeight=20,饼的厚度
//$SpliceDistance=0,各板块间距离
//$Decimals=0 显示百分比小数位数
$im->drawPieGraph($data->GetData(),$data->GetDataDescription(),180,130,110,PIE_PERCENTAGE_LABEL,false,50,20,5,2);

//饼图的标签列表(从左至右顺序)
//$XPos,$YPos,标签框左上角的XY坐标
//$Data,$DataDescription,同上个函数内容
//$R,$G,$B 背景颜色
$im->drawPieLegend(330,15,$data->GetData(),$data->GetDataDescription(),250,250,250);

//第四步 制作图表标题
$im->setFontProperties("c://windows//fonts//Arialuni.ttf",12);
//写入标题的函数
//XPos,$YPos,坐标,注意这是左下角的坐标,而不是通常的左上角
//$Value,标题文字内容
//$R,$G,$B,文字颜色
//$XPos2=-1,$YPos2=-1,也是座标调整的设置,具体效果你自己实验吧
//$Shadow=FALSE 阴影开关
$im->drawTitle(20,30,'我画的一个饼图',100,100,100,-1,-1,false);

//第五步 整理并输出图形
$im->Render("test.png");//保存为一个图形文件
?> 

饼图调用:<img src=”test.png” />