PHP柱状图、饼状图和线性图

首先我们要介绍一下我们在这篇文章中使用的PHPLibchart ,这是个外国人(非中国国籍的地球人,被称为外国人!)写的免费类!使用起来非常简单。看出来了吧,我们是要用一个外国人写的PHP 创建柱状图,饼状图,和线性图的类,来工作的。如果你要学习这个类的写法,你也可以把这个类下载下来看看外国人的思路!

我们开始吧,首先下载这个类 点击此处:下载Libchart ,解压缩!

第一个用例,我们来创建一个纵向的柱状图:
首先我们包含这个类文件到我们的程序中,并且实例化这个类,程序如下:

requir_once( './Libchart/classes/libchart.php' ) ;

$chart = new VerticalBarChart( 500 , 250 ) ; // 参数表示需要创建的图像的宽和高

 

$dataSet = new XYDataSet() ; // 实例化一个 XY 轴数据对象

// 为这个对象增加四组数据集合, Point 对象的第一个参数表示 X 轴坐标,第二个表示 Y 轴坐标

$dataSet -> addPoint ( new Point( "Jan 2005" , 273 )) ;

$dataSet -> addPoint ( new Point( "Feb 2005" , 321 )) ;

$dataSet -> addPoint ( new Point( "March 2005" , 442 )) ;

$dataSet -> addPoint ( new Point( "April 2005" , 711 )) ;

 

// 把这个数据集合传递给图形对象

$chart -> setDataSet ( $dataSet ) ;

// 设置图形的标题,并把它作为一个 png 文件渲染

$chart -> setTitle ( "Monthly usage for www.example.com" ) ;

$chart -> render ( "generated/demo1.png" ) ; // 这里需要一个路径和文件名称

就这么简单一个像下图一样美丽的柱状图就出来了。

PHP 柱状图

PHP 创建一个饼状图的过程和上边说的柱状图大同小异 ,具体实例代码如下:

$chart = new PieChart( 500 , 250 ) ;

 

$dataSet = new XYDataSet() ;

$dataSet -> addPoint ( new Point( "Mozilla Firefox (80)" , 80 )) ;

$dataSet -> addPoint ( new Point( "Konqueror (75)" , 75 )) ;

$dataSet -> addPoint ( new Point( "Other (50)" , 50 )) ;

$chart -> setDataSet ( $dataSet ) ;

 

$chart -> setTitle ( "User agents for www.example.com" ) ;

$chart -> render ( "generated/demo2.png" ) ;

创建饼状图 就一点值得说一下就是Point 的参数,第一个参数是占用比例的名称,第二个是数据,并不存在XY 坐标;图如下:

饼状图

创建一个线性图, 这个有点和上边两个不同,就是数据集合的不同。我们也看到了XYDataSet 这个数据集合, 另外在这个类中还有一个数据集合XYSeriesDataSet() ,这个其实是一个比XYDataSet 更大的集合而已,他的元素就是 XYDataSet ,看一下例子和这段创建PHP 线性图的程序,你一定就明白了:

include "../libchart/classes/libchart.php" ;

 

$chart = new LineChart( 500 , 250 ) ;

 

$serie1 = new XYDataSet() ;

$serie1 -> addPoint ( new Point( "06-01" , 273 )) ;

$serie1 -> addPoint ( new Point( "06-02" , 421 )) ;

$serie1 -> addPoint ( new Point( "06-03" , 642 )) ;

$serie1 -> addPoint ( new Point( "06-04" , 799 )) ;

$serie1 -> addPoint ( new Point( "06-05" , 1009 )) ;

$serie1 -> addPoint ( new Point( "06-06" , 1106 )) ;

 

$serie2 = new XYDataSet() ;

$serie2 -> addPoint ( new Point( "06-01" , 280 )) ;

$serie2 -> addPoint ( new Point( "06-02" , 300 )) ;

$serie2 -> addPoint ( new Point( "06-03" , 212 )) ;

$serie2 -> addPoint ( new Point( "06-04" , 542 )) ;

$serie2 -> addPoint ( new Point( "06-05" , 600 )) ;

$serie2 -> addPoint ( new Point( "06-06" , 850 )) ;

 

// 这些和前面的两个看起来没有什么区别,关键在下边这一段,需要自己理解一下啦:

$dataSet = new XYSeriesDataSet() ;

$dataSet -> addSerie ( "Product 1" , $serie1 ) ;

$dataSet -> addSerie ( "Product 2" , $serie2 ) ;

$chart -> setDataSet ( $dataSet ) ;

$chart -> setTitle ( "Sales for 2006" ) ;

$chart -> render ( "generated/demo3.png" ) ;

画出这样一个图来:

线性图

然后,把数据交给图形实例,然后渲染图形,和创建柱状图和线性图是一样的。其实国外还有好多创建柱状图和饼状图的类程序,有的还相当的NB ,例如结合flash 的,结合web css 的不一而足,这个用起来相对简单一点,大家尽管拿去用好了!

转载请注明来源  : 柳城博客

本文详细出处参考: http://www.liucheng.name/?p=404

 

附:libchart中文乱码的解决

1、自己写的使用Libchart 库生成图表的php 文件以utf-8编码保存
2、找几个中文字体库,比如华文行楷、宋体等等,复制到libchart \fonts目录下
3、修改libchart \classes目录下的text.php 文件
第47、48行

  1. $this->fontCondensed = dirname(__FILE__) . "/../fonts/DejaVuSansCondensed.ttf";
  2. $this->fontCondensedBold = dirname(__FILE__) . "/../fonts/DejaVuSansCondensed-Bold.ttf";

改为

  1. $this->fontCondensed = dirname(__FILE__) . "/../fonts/你找来的中文字体";
  2. $this->fontCondensedBold = dirname(__FILE__) . "/../fonts/你找来的中文字体";

now,图表里现在显示中文了!!!

 

你可能感兴趣的:(PHP,css,Flash,oop,firefox)