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作图很难实现的!
来看一下它的源码吧:
02 |
require_once ('jpgraph/jpgraph.php'); |
03 |
require_once ('jpgraph/jpgraph_bar.php'); |
06 |
$data1y=array(-8,8,9,3,5,6); |
07 |
$data2y=array(18,2,1,7,5,4); |
10 |
$graph = new Graph(500,400); |
11 |
$graph->SetScale("textlin"); |
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 |
29 |
$graph->title->Set("Accumulated bar plots"); |
30 |
$graph->xaxis->title->Set("X-title"); |
31 |
$graph->yaxis->title->Set("Y-title"); |
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); |
38 |
//生成本地图表,黙认留空,生成在当前目录,可以Stroke(“路径/文件名.png”)这样指定路径 |
JpGraph的难点是中文乱码的解决,本来还想把这个问题一块解决的,但似乎篇幅有点长了,留到下一篇吧
小结:调试JpGraph,需要注意其运行环境、版本、操作系统以及代码的完整性,不然相同的代码可能却无法正确运行。
在前面的JpGraph使用详解这篇文章,已经对JpGraph的使用方法作了详细的交代,前面说好的,接下来解决中文乱码。
JpGraph为什么会出现中文乱码
在JpGraph中默认是要把字符串转成utf8的,但是如果你的文件本身就是utf8的,并且要用中文字体,它还会转一遍,结果多转了一次,就会出现乱码。如图所示

解决中文乱码
取前篇的代码片断如下
2 |
$graph->title->Set("Accumulated bar plots"); |
3 |
$graph->xaxis->title->Set("X-title"); |
4 |
$graph->yaxis->title->Set("Y-title"); |
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); |
把它改为
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-标题")); |
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也表示中文但是它们对应的字体文件是不同的,所以不要弄错。
下面是正确转换后生成的图

下面是本例调试的完整代码
01 |
require_once ('jpgraph/jpgraph.php'); |
02 |
require_once ('jpgraph/jpgraph_bar.php'); |
04 |
$data1y=array(0,8,9,3,5,6); |
05 |
$data2y=array(18,2,1,7,5,4); |
07 |
// Create the graph. These two calls are always required |
08 |
$graph = new Graph(500,400); |
09 |
$graph->SetScale("textlin"); |
12 |
$graph->img->SetMargin(40,30,20,40);//设置图形的边距 |
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(); |
22 |
// Create the grouped bar plot |
23 |
$gbplot = new AccBarPlot(array($b1plot,$b2plot)); |
25 |
// ...and add it to the graPH |
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-标题")); |
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); |
当然了,我这里只介绍了一种方法,还有一种就是修改源码,但不推荐。因为我觉得改动源码可能会给其它地方带来意想不到的麻烦。
使用JpGraph,要知道其版本、运行服务器以及操作系统的息息,不能张冠李戴,否则麻烦多多。
好了,至此JpGraph使用介绍也就这么多了。
- JpGraph使用详解之中文乱码解决方法
在前面的JpGraph使用详解这篇文章,已经对JpGraph的使用方法作了详细的交代,前面说好的,接下来解决中文乱码. JpGraph为什么会出现中文乱码 在JpGraph中默认是要把字符串转成utf ...
- JpGraph使用详解http://5ydycm.blog.51cto.com/115934/177498 http://www.cnblogs.com/txw1958/archive/2013/08/18/php-charts.html
下载 在官方网站 http://www.aditus.nu/jpgraph/ 下载jpgraph,其中1.X系列是用于PHP4的,2.X系列是用于PHP5的. 安装 将下载的得到的jpgraph压缩文 ...
- JpGraph使用详解
微信平台开发的推广支持应用里,为了满足用户渠道推广分析的需要,公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送,借此可以通过统计不 ...
- ASIHttpRequest网络请求第三方类库使用方法详解
一. 第一步首先你要从网络上下载ASIHttpRequestlib, 下载以后解压,增加到你的工程里面, 这个时间检查工程内部是否已经导入成功,文件结构如下: ASIHTTPRequestConfig ...
- NLog类库使用探索——详解配置
1 配置文件的位置(Configuration file locations) 通过在启动的时候对一些常用目录的扫描,NLog会尝试使用找到的配置信息进行自动的自我配置. 1.1 单独的*.exe客户 ...
- AngularCli项目中添加字体图标(Font)详解
本文主要讲如何在AngularCli生成的项目中使用字体图标. 一 SVG图标准备 将需要转换为字体图标的图片转换为SVG格式. 这个让项目视觉设计师搞定即可. 二 SVG图标转Font 可以通过Ic ...
- 如何在虚拟机安装的Win10系统里快速打开【此电脑】图标?(图文详解)
不多说,直接上干货! 为什么要写写这篇博客? 技多不压身,很多小技巧很重要,方便自己. 比如,对于这样的工具,个人来讲,玩过试用期,意味着你若不找点法子,是不行的.否则你没得玩了. 全网最详细的Tab ...
- JAVA IO 类库详解
JAVA IO类库详解 一.InputStream类 1.表示字节输入流的所有类的超类,是一个抽象类. 2.类的方法 方法 参数 功能详述 InputStream 构造方法 available 如果用 ...
- WindowsPhone自定义控件详解(二) - 模板类库分析
转自:http://blog.csdn.net/mr_raptor/article/details/7251948 WindowsPhone自定义控件详解(一) - 控件类库分析 上一节主要分析了控件 ...
随机推荐
- 使用JDBC向数据库中插入一条数据
原谅我是初学者,这个方法写的很烂,以后不会改进,谢谢 /** * 通过JDBC向数据库中插入一条数据 1.Statement 用于执行SQL语句的对象 1.1 通过Connection 的 * cre ...
- SecureCRT远程控制ubuntu
如果你拥有两台电脑一台是ubuntu,另一台是笔记本电脑,而你又想在远程控制你的ubuntu,那么SecureCRT就可以用了. 1:首先在你的ubuntu电脑上安装SSH服务 :apt-get i ...
- Silverlight形状、画笔、变换、图像处理、几何图形
1.形状(Ellipse.Line.Path.Polygon.Polyline 和 Rectangle) <UserControl x:Class="SharpStudy.MainPa ...
- (一)在linux上ubuntu搭建hustOJ系统
同实验室有人在用java写签到系统,正好我在学习PHP,我就在想能不能在以前学长留下来一直没用OJ上添加一个签到功能. 于是说干就干,就找了许多关于hustoj的文章参考. 首先要说的是安装husto ...
- zendframework 事件管理(二)
首先需要明确的几个问题: Q1.什么是事件? A:事件就是一个有名字的行为.当这个行为发生的时候,称这个事件被触发. Q2.监听器又是什么? A:监听器决定了事件的逻辑表达,由事件触发.监听器和事件往 ...
- [CSS]学习总结
1. 遮挡层 .occlusion { opacity: -.35;/*透明程度*/ -moz-opacity: -.35; filter: alpha(opacity=-35); height: 1 ...
- 进程和cpu绑定
#include<stdlib.h> #include<stdio.h> #include<sys/types.h> #include<sys/sysinfo ...
- ARPA
ARPA是英文Advanced Research Projects Agency的缩写,代表美国国防部高级研究计划署.是美国国防部高级研究计划管理局因军事目的而建立的,开始时只连接了4台主机,这便是只 ...
- visuall assist x 破解方法
visuall assist x 破解方法 试用期过了后,不管怎么装,或者是找网上的KEY都不行,所以试了一下的方法,成功了: 1.先下载Visual Assist X 10.6.1845.0 2 ...
- js之正则表达式(下)
1.分组之exec返回数组 1>非分组匹配的exec返回数组: var pattern =/\d+[a-z]+/; var str='234google'; alert(pattern.exec ...