PHP图标类库 - JpGraph使用详解

http://w3note.com/web/181.html

 

微信平台开发的推广支持应用里,为了满足用户渠道推广分析的需要,公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送,借此可以通过统计不同场景扫描的二维码的结果来获取商业信息。

 

为了更形象地展示统计结果,可以使用php作图,不过这需要掌握复杂抽象的画图函数,这里推荐使用php的JpGraph图表类库,它使得作图变成了一件非常简单的事情,你只需从数据库中取出相关数据,定义标题,图表类型,然后的事情就交给JpGraph,只需掌握为数不多的JpGraph内置函数(可以参照JpGraph附带例子学习),就可以画出非常炫目的图表!

 

因为我最近也在做phpcmw微信插件用户信息统计这块,所以对JpGraph作了一番研究应用。为避免初学者走我走过的弯路,我把调试记录整 理出来,分享给大家。

 

通过本文你至少可以掌握以下技巧:

1、能够使用JpGraph画出各式各样的图表

2、解决中文乱码

 

一、开启GD库

Jpgraph需要GD库的支持,所以在调式JpGraph之前,确保GD库已开启,这很重要,不然后面的工作就没办法展开了。GD库在PHP5中是被默认安装的,我们只需开启GD库就可以了。

打开php.ini文件,找到“;extension=php_gd2.dll”选项,将其前的分号“;”去掉,如图所示

然后保存修改后的文件并重新启动apache服务器。可以通过phpinfo()函数来获取GD2函数库的安装信息,验证GD库是否安装成功。

 

二、使用方法

在使用JpGraph时,最好弄明白你使用的是哪一个版本,千万不要弄错,不然就会张冠李戴,让你调得头晕目眩的。也不要从网上找一些片断代码来调试,除非它是完整的,不然也会让你吃不了兜着走的了。唠叼就到这里了,下面开始调试。

 

运行环境

操作系统  W7

代码运行环境  apache+php5.3

JpGraph版本 jpgraph-3.5.0b1(点击这里下载或者到官网http://jpgraph.net/download/下载)

 

解压下载的jpgraph-3.5.0b1压缩包,会看到一些目录:

src:图表生成所依赖的代码包,其子目录Examples里有许多的实例。

src\Examples:里面包函许多实例,使用它们可以制作各种各样的图表

docs :jpgraph的开发文档,但全是英文的.。

docs\chunkhtml:里面有许多案例及附有图表,通过它我们可以参考一下我们所需要的图表。

 

在网站根目录建一个文件夹test,然后把把docs和src文件夹拷贝到前面所创建的目录test里,重命名src为jpgraph,这里因为Examples里面的实例文件加载的路径都是“require_once ('jpgraph/jpgraph.php');”

 

实例

把jpgraph\Examples\accbarex1.php拷贝到test目录(和jpgraph同一目录),然后打开打开http://localhost/test/accbarex1.php,我们就会看到生成的图

哗,这是我们使用PHP作图很难实现的!

 

来看一下它的源码吧:

01//加载生成图表对应的文件
02require_once ('jpgraph/jpgraph.php');
03require_once ('jpgraph/jpgraph_bar.php');
04 
05//创建图表的数据,可以自定义
06$data1y=array(-8,8,9,3,5,6);
07$data2y=array(18,2,1,7,5,4);
08 
09// 图表的长宽
10$graph new Graph(500,400);
11$graph->SetScale("textlin");
12$graph->SetShadow();
13 
14//图表的外边距
15$graph->img->SetMargin(40,30,20,40);
16// Create the bar plots
17$b1plot new BarPlot($data1y);
18$b1plot->SetFillColor("orange");
19$b1plot->value->Show();
20$b2plot new BarPlot($data2y);
21$b2plot->SetFillColor("blue");
22$b2plot->value->Show();
23// Create the grouped bar plot
24$gbplot new AccBarPlot(array($b1plot,$b2plot));
25// ...and add it to the graPH
26$graph->Add($gbplot);
27 
28//设置图表的标题字体、大小
29$graph->title->Set("Accumulated bar plots");
30$graph->xaxis->title->Set("X-title");
31$graph->yaxis->title->Set("Y-title");
32 
33//和上面标题对应,设置标题的字体和大小
34$graph->title->SetFont(FF_FONT1,FS_BOLD);
35$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
36$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
37 
38//生成本地图表,黙认留空,生成在当前目录,可以Stroke(“路径/文件名.png”)这样指定路径
39$graph->Stroke();

JpGraph的难点是中文乱码的解决,本来还想把这个问题一块解决的,但似乎篇幅有点长了,留到下一篇吧

 

小结:调试JpGraph,需要注意其运行环境、版本、操作系统以及代码的完整性,不然相同的代码可能却无法正确运行。


 

JpGraph使用详解之中文乱码解决方法

在前面的JpGraph使用详解这篇文章,已经对JpGraph的使用方法作了详细的交代,前面说好的,接下来解决中文乱码。

JpGraph为什么会出现中文乱码

在JpGraph中默认是要把字符串转成utf8的,但是如果你的文件本身就是utf8的,并且要用中文字体,它还会转一遍,结果多转了一次,就会出现乱码。如图所示

 

解决中文乱码

取前篇的代码片断如下

1//设置图表的标题字体、大小
2$graph->title->Set("Accumulated bar plots");
3$graph->xaxis->title->Set("X-title");
4$graph->yaxis->title->Set("Y-title");
5 
6//和上面标题对应,设置标题的字体和大小
7$graph->title->SetFont(FF_FONT1,FS_BOLD);
8$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
9$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

把它改为

1//设置图表的标题字体、大小
2$graph->title->Set(iconv("UTF-8","GB2312//IGNORE","网志博客信息统计表"));
3$graph->xaxis->title->Set(iconv("UTF-8","GB2312//IGNORE","X-标题"));
4$graph->yaxis->title->Set(iconv("UTF-8","GB2312//IGNORE","Y-标题"));
5 
6//和上面标题对应,设置标题的字体和大小
7$graph->title->SetFont(FF_SIMSUN,FS_BOLD);
8$graph->yaxis->title->SetFont(FF_SIMSUN,FS_BOLD);
9$graph->xaxis->title->SetFont(FF_SIMSUN,FS_BOLD);

使用php函数据中文由UTF-8转为GB2312,记住由于iconv本身的一个bug,iconv在转换字符"—"到gb2312时会出错,所以在需要转成的编码后加上 "//IGNORE" 。

FF_SIMSUN表示中文简体,对应的字体文件是simsun.ttc,虽然FF_CHINESE和FF_BIG5也表示中文但是它们对应的字体文件是不同的,所以不要弄错。

 

下面是正确转换后生成的图

下面是本例调试的完整代码

01require_once ('jpgraph/jpgraph.php');
02require_once ('jpgraph/jpgraph_bar.php');
03 
04$data1y=array(0,8,9,3,5,6);
05$data2y=array(18,2,1,7,5,4);
06 
07// Create the graph. These two calls are always required
08$graph new Graph(500,400);
09$graph->SetScale("textlin");
10 
11$graph->SetShadow();
12$graph->img->SetMargin(40,30,20,40);//设置图形的边距
13 
14// Create the bar plots
15$b1plot new BarPlot($data1y);
16$b1plot->SetFillColor("orange");
17$b1plot->value->Show();
18$b2plot new BarPlot($data2y);
19$b2plot->SetFillColor("blue");
20$b2plot->value->Show();
21 
22// Create the grouped bar plot
23$gbplot new AccBarPlot(array($b1plot,$b2plot));
24 
25// ...and add it to the graPH
26$graph->Add($gbplot);
27//设置标题字体样式
28$graph->title->Set(iconv("UTF-8","GB2312//IGNORE","网志博客信息统计表"));
29$graph->xaxis->title->Set(iconv("UTF-8","GB2312//IGNORE","X-标题"));
30$graph->yaxis->title->Set(iconv("UTF-8","GB2312//IGNORE","Y-标题"));
31 
32$graph->title->SetFont(FF_SIMSUN,FS_BOLD);
33$graph->yaxis->title->SetFont(FF_SIMSUN,FS_BOLD);
34$graph->xaxis->title->SetFont(FF_SIMSUN,FS_BOLD);
35 
36$graph->Stroke();

当然了,我这里只介绍了一种方法,还有一种就是修改源码,但不推荐。因为我觉得改动源码可能会给其它地方带来意想不到的麻烦。

 

使用JpGraph,要知道其版本、运行服务器以及操作系统的息息,不能张冠李戴,否则麻烦多多。

好了,至此JpGraph使用介绍也就这么多了。

 

转载于:https://www.cnblogs.com/kenshinobiy/p/4782166.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值