下载
在官方网站 http://www.aditus.nu/jpgraph/ 下载jpgraph,其中1.X系列是用于PHP4的,2.X系列是用于PHP5的。
安装
将下载的得到的jpgraph压缩文件解压至相应的路径。
配置
首先需要注意的是:要想适用 jpgraph ,你的 PHP 必须开启了 GD2 扩展。
在 jpgraph.php 中有以下这样一段代码是设置字体文件路径的
if (!defined('TTF_DIR')) {
首先需要注意的是:要想适用 jpgraph ,你的 PHP 必须开启了 GD2 扩展。
在 jpgraph.php 中有以下这样一段代码是设置字体文件路径的
if (!defined('TTF_DIR')) {
if (strstr( PHP_OS, 'WIN') ) {
$sroot = getenv('SystemRoot');
if( empty($sroot) ) {
$t = new ErrMsgText();
$msg = $t->Get(12,$file,$lineno);
die($msg);
}
else {
define('TTF_DIR', $sroot.'/fonts/');
}
} else {
define('TTF_DIR','/usr/share/fonts/truetype/');
ç
(
我的作法是将
windows
下的
fonts
文件夹下的字体全部
COPY
到
/usr/local/fonts/truetype)
}
}
要支持中文需要用到
simhei.ttf
和
simsun.ttc
这两个字体
,
在使用中文的时候需要使用
SetFont(FF_SIMSUN,FS_BOLD)
设置字体。
如果你的文件编码为 utf-8, 修改方法如下:
代码:
方法一,在程序中修改
$title=" 流量图 ";
$title = iconv("UTF-8", "gb2312", $title);
$graph->title->Set($title);
方法二,修改源文件 jpgraph_ttf.inc.php
在第 99-106 行,改成下面这样子
elseif( $aFF === FF_SIMSUN ) {
// Do Chinese conversion
/*
if( $this->g2312 == null ) {
include_once 'jpgraph_gb2312.php' ;
$this->g2312 = new GB2312toUTF8();
}
return $this->g2312->gb2utf8($aTxt);
*/
return $aTxt;
}
jpgraph 默认显示汉字时是把汉字编码认为 gb2312, 转化为 utf-8 以后再显示。
这样的话,如果你的文件编码是 gb2312,SetFont 方法的第一个参数为 FF_SIMSUN 即可。
如果你是 utf-8 编码你还需要先把汉字编码转化为 gb2312 ,这样你的汉字才可以正常显示。
使用
可以参照 jpgraph-2.3.4\src\Examples 中的例子。下面是一些常用的:
$graph->title->Set(‘ 设置图表的标题 ’);
$graph->xaxis->title->Set(" 设置 X 轴的标题 ");
$graph->yaxis->title->Set(" 设置 Y 轴的标题 ");
// 设置字体 如果是中文,第一个参数一般设置为 FF_SIMSUN
SetFont(FF_SIMSUN,FS_BOLD,14);
// 如设置图表标题的字体
$graph->title->SetFont(FF_SIMSUN,FS_BOLD,14);
// 设置颜色
SetColor('red');
如果你的文件编码为 utf-8, 修改方法如下:
代码:
方法一,在程序中修改
$title=" 流量图 ";
$title = iconv("UTF-8", "gb2312", $title);
$graph->title->Set($title);
方法二,修改源文件 jpgraph_ttf.inc.php
在第 99-106 行,改成下面这样子
elseif( $aFF === FF_SIMSUN ) {
// Do Chinese conversion
/*
if( $this->g2312 == null ) {
include_once 'jpgraph_gb2312.php' ;
$this->g2312 = new GB2312toUTF8();
}
return $this->g2312->gb2utf8($aTxt);
*/
return $aTxt;
}
jpgraph 默认显示汉字时是把汉字编码认为 gb2312, 转化为 utf-8 以后再显示。
这样的话,如果你的文件编码是 gb2312,SetFont 方法的第一个参数为 FF_SIMSUN 即可。
如果你是 utf-8 编码你还需要先把汉字编码转化为 gb2312 ,这样你的汉字才可以正常显示。
使用
可以参照 jpgraph-2.3.4\src\Examples 中的例子。下面是一些常用的:
$graph->title->Set(‘ 设置图表的标题 ’);
$graph->xaxis->title->Set(" 设置 X 轴的标题 ");
$graph->yaxis->title->Set(" 设置 Y 轴的标题 ");
// 设置字体 如果是中文,第一个参数一般设置为 FF_SIMSUN
SetFont(FF_SIMSUN,FS_BOLD,14);
// 如设置图表标题的字体
$graph->title->SetFont(FF_SIMSUN,FS_BOLD,14);
// 设置颜色
SetColor('red');
Example:
例1. php Jpgraph绘制简单的X-Y坐标图
<?php
include ("../jpgraph.php");
include ("../jpgraph_line.php");
//
将要用于图表创建的数据存放在数组中
$data = array(19,23,34,38,45,67,71,78,85,90,96,145);
$graph = new Graph(500,300); //
创建新的
Graph
对象
$graph->SetScale("textlin"); //
设置刻度样式
$graph->img->SetMargin(30,30,80,30); //
设置图表边界
$graph->title->Set("CDN Traffic Total"); //
设置图表标题
$graph->title->SetColor("blue");
$graph->title->SetMargin(20);
// Create the linear plot
$lineplot=new LinePlot($data); //
创建新的
LinePlot
对象
$lineplot->SetLegend("Line(Mbits)"); //
设置图例文字
$lineplot->SetColor("red"); //
设置曲线的颜色
// Add the plot to the graph
$graph->Add($lineplot); //
在统计图上绘制曲线
// Display the graph
$graph->Stroke(); //
输出图像
?>
![](https://i-blog.csdnimg.cn/blog_migrate/0acd85b329f5a32d50b66067d2b2a76b.jpeg)
例2. php Jpgraph绘制复杂的X-Y坐标图
<?php
include ("../jpgraph.php");
include ("../jpgraph_line.php");
$data1 = array(523,634,371,278,685,587,490,256,398,545,367,577); //
第一条曲线的数组
$data2 = array(19,23,34,38,45,67,71,78,85,87,90,96); //
第二条曲线的数组
$graph = new Graph(500,300,auto); //
创建新的
Graph
对象
$graph->SetScale("textlin");
$graph->SetShadow(); //
设置图像的阴影样式
$graph->img->SetMargin(60,30,30,70); //
设置图像边距
$graph->title->Set("CDN
流量图
"); //
设置图像标题
$graph->title->SetMargin(10);
$lineplot1=new LinePlot($data1); //
创建设置两条曲线对象
$lineplot2=new LinePlot($data2);
$lineplot1->value->Show();
$lineplot1->value->SetColor("black");
$graph->Add($lineplot1); //
将曲线放置到图像上
$graph->Add($lineplot2);
$graph->xaxis->title->Set("
月份
"); //
设置坐标轴名称
$graph->yaxis->title->Set("
流
量
(Gbits)");
$graph->xaxis->title->SetMargin(10);
$graph->yaxis->title->SetMargin(10);
$graph->title->SetFont(FF_SIMSUN,FS_BOLD); //
设置字体
$graph->yaxis->title->SetFont(FF_SIMSUN,FS_BOLD);
$graph->xaxis->title->SetFont(FF_SIMSUN,FS_BOLD);
$graph->xaxis->SetTickLabels($gDateLocale->GetShortMonth());
$lineplot1->SetColor("red"); //
设置颜色
$lineplot2->SetColor("blue");
$lineplot1->SetLegend("Max"); //
设置图例名称
$lineplot2->SetLegend("Min");
$graph->legend->SetLayout(LEGEND_HOR); //
设置图例样式和位置
$graph->legend->Pos(0.5,0.96,"center","bottom");
$graph->Stroke(); //
输出图像
?>
![](https://i-blog.csdnimg.cn/blog_migrate/413f89b2048ae730728d6fa5e083e9bd.jpeg)
例3. php Jpgraph绘制柱形图
<?php
include ("../jpgraph.php");
include ("../jpgraph_bar.php");
$data = array(19,23,34,38,45,67,71,78,85,87,96,145); //
定义数组
$ydata = array("
一
","
二
","
三
","
四
","
五
","
六
","
七
","
八
","
九
","
十
","
十一
","
十二
");
$graph = new Graph(500,300); //
创建新的
Graph
对象
$graph->SetScale("textlin");
$graph->SetShadow(); //
设置阴影
$graph->img->SetMargin(40,30,40,50); //
设置边距
$barplot = new BarPlot($data); //
创建
BarPlot
对象
$barplot->SetFillColor('blue'); //
设置颜色
$barplot->value->Show(); //
设置显示数字
$graph->Add($barplot); //
将柱形图添加到图像中
$graph->title->Set("CDN
流量图
"); //
设置标题和
X-Y
轴标题
$graph->title->SetColor("red");
$graph->title->SetMargin(10);
$graph->xaxis->title->Set("
月份
");
$graph->xaxis->title->SetMargin(5);
$graph->xaxis->SetTickLabels($ydata);
$graph->yaxis->title->Set("
流
量
(Mbits)");
$graph->title->SetFont(FF_SIMSUN,FS_BOLD); //
设置字体
$graph->yaxis->title->SetFont(FF_SIMSUN,FS_BOLD);
$graph->xaxis->title->SetFont(FF_SIMSUN,FS_BOLD);
$graph->xaxis->SetFont(FF_SIMSUN,FS_BOLD);
$graph->Stroke();
?>
![](https://i-blog.csdnimg.cn/blog_migrate/daa219fd3a1fa8a0e2d14adb6bbe93b9.jpeg)
例4. php Jpgraph绘制饼图
<?php
include ("../jpgraph.php");
include ("../jpgraph_pie.php");
$data = array(19,23,34,38,45,67,71,78,85,87,90,96);
$lable_data = range(1,12);
$graph = new PieGraph(400,300);
$graph->SetShadow();
$graph->title->Set("CDN
流量比例
");
$graph->title->SetFont(FF_SIMSUN,FS_BOLD);
$pieplot = new PiePlot($data);
$pieplot->SetLegends($lable_data);
$pieplot->SetCenter(0.4);
$graph->Add($pieplot);
$graph->Stroke();
?>
![](https://i-blog.csdnimg.cn/blog_migrate/1ed9200fb9894b47963808e32bcb9a2a.jpeg)
例5. php Jpgraph绘制3D饼图
<?php
include ("../jpgraph.php");
include ("../jpgraph_pie.php");
include ("../jpgraph_pie3d.php");
$data = array(19,23,34,38,45,67,71,78,85,87,90,96);
$graph = new PieGraph(550,400);
$graph->SetShadow();
$graph->title->Set("CDN
流量比例
");
$graph->title->SetFont(FF_SIMSUN,FS_BOLD);
$pieplot = new PiePlot3D($data); //
创建
PiePlot3D
对象
$pieplot->SetCenter(0.4); //
设
置饼图中心的位置
$pieplot->SetLegends($gDateLocale->GetShortMonth()); //
设置图例
$graph->Add($pieplot);
$graph->Stroke();
?>
![](https://i-blog.csdnimg.cn/blog_migrate/50201ae8f53296c3f9388b5043f980f3.jpeg)
例6.
index.html
<html>
<head>
<title>CDN
流量查询系统统计
</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<mce:style type="text/css"><!--
.style1 {
font-size: 16px;
font-weight: bold;
}
--></mce:style><style type="text/css" mce_bogus="1">.style1 {
font-size: 16px;
font-weight: bold;
}</style>
</head>
<body>
<form name="form1" method="get" action="result.php">
<p align="center" class="style1"> CDN
流量查询系统统计
</p>
<table width="300" border="1" align="center" cellpadding="3" cellspacing="3">
<tr>
<td width="85"><strong>
查询年份
</strong></td>
<td width="188"><select name="acct_yr" id="acct_yr">
<option value="2009" selected>2008</option>
<option value="2009" selected>2009</option>
</select></td>
</tr>
<tr>
<td><strong>
起始月份
</strong></td>
<td><select name="start_mth" id="start_mth">
<option selected>01</option>
<option>02</option>
<option>03</option>
<option>04</option>
<option>05</option>
<option>06</option>
<option>07</option>
<option>08</option>
<option>09</option>
<option>10</option>
<option>11</option>
<option>12</option>
</select></td>
</tr>
<tr>
<td><strong>
终止月份
</strong></td>
<td><select name="end_mth" id="end_mth">
<option >01</option>
<option>02</option>
<option>03</option>
<option>04</option>
<option>05</option>
<option>06</option>
<option>07</option>
<option>08</option>
<option>09</option>
<option>10</option>
<option>11</option>
<option selected >12</option>
</select></td>
</tr>
<tr>
<td><strong>
统计图类别
</strong></td>
<td><select name="graph" id="graph">
<option value="1" selected>
线型图
</option>
<option value="2">
柱形图
</option>
<option value="3">
饼图
</option>
<option value="4">3D
饼图
</option>
</select></td>
</tr>
</table>
<p align="center">
<input type="submit" value="Submit">
<input type="reset" name="Submit2" value="Reset">
</p>
</form>
</body>
</html>
![](https://i-blog.csdnimg.cn/blog_migrate/06147dbc2fa90bd885b460fdb8421805.jpeg)
result.php
<?php
include ("../jpgraph.php");
include ("../jpgraph_line.php");
include ("../jpgraph_bar.php");
include ("../jpgraph_pie.php");
include ("../jpgraph_pie3d.php");
$conn = mysql_connect("localhost", "root", "woxiangnileyali"); //
连接数据库
$acct_yr = $_GET['acct_yr']; //
获取年份
$start_mth = $_GET['start_mth']; //
获取超始月份
$end_mth = $_GET['end_mth']; //
获取结束月份
$choose = $_GET['graph']; //
获取图形类型
mysql_select_db("test", $conn); //
执行
SQL,
获得销量值
$query_rs_prod = "SELECT acct_mth, amount FROM traffic WHERE acct_yr = '$acct_yr' and acct_mth between '$start_mth' and '$end_mth'";
$rs_prod = mysql_query($query_rs_prod, $conn) or die(mysql_error());
$row_rs_prod = mysql_fetch_assoc($rs_prod);
$totalRows_rs_prod = mysql_num_rows($rs_prod);
$data = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); //
初始化数组
do //
循环设置各月份数值
{
$i = (int)$row_rs_prod['acct_mth']-1;
$data[$i] = $row_rs_prod['amount'];
} while($row_rs_prod = mysql_fetch_assoc($rs_prod));
switch($choose)
{
case 1:
$graph = new Graph(400,300); //
创建新的
Graph
对象
$graph->SetScale("textlin"); //
设置刻度样式
$graph->img->SetMargin(30,30,80,30); //
设置图表边界
$graph->title->SetFont(FF_SIMSUN,FS_BOLD); //
设置字体
$graph->title->Set("CDN
流量查询
"); //
设置图表标题
$lineplot=new LinePlot($data);
$lineplot->SetLegend("Line");
$lineplot->SetColor("red");
$graph->Add($lineplot);
break;
case 2:
$graph = new Graph(400,300);
$graph->SetScale("textlin");
$graph->SetShadow();
$graph->img->SetMargin(40,30,20,40);
$barplot = new BarPlot($data); //
创建
BarPlot
对象
$barplot->SetFillColor('blue'); //
设置颜色
$barplot->value->Show(); //
设置显示数字
$graph->Add($barplot); //
将柱形图添加到图像中
$graph->title->Set("CDN
流量查询
"); //
设置标题和
X-Y
轴标题
$graph->xaxis->title->Set("
月份
");
$graph->yaxis->title->Set("
流
量
(Gbits)");
$graph->title->SetFont(FF_SIMSUN,FS_BOLD); //
设置字体
$graph->yaxis->title->SetFont(FF_SIMSUN,FS_BOLD);
$graph->xaxis->title->SetFont(FF_SIMSUN,FS_BOLD);
break;
case 3:
$graph = new PieGraph(400,300);
$graph->SetShadow();
$graph->title->Set("CDN
流量查询
");
$graph->title->SetFont(FF_SIMSUN,FS_BOLD);
$pieplot = new PiePlot($data);
$pieplot->SetLegends($gDateLocale->GetShortMonth()); //
设置图例
$graph->Add($pieplot);
break;
case 4:
$graph = new PieGraph(400,300);
$graph->SetShadow();
$graph->title->Set("CDN
流量查询
");
$graph->title->SetFont(FF_SIMSUN,FS_BOLD);
$pieplot = new PiePlot3D($data); //
创建
PiePlot3D
对象
$pieplot->SetCenter(0.4); //
设置饼图中心的位置
$pieplot->SetLegends($gDateLocale->GetShortMonth()); //
设置图例
$graph->Add($pieplot);
break;
default:
echo "graph
参数错误
";
exit;
}
$graph->Stroke();
?>
![](https://i-blog.csdnimg.cn/blog_migrate/4cfcecafebe48a47410591cc98c86ab0.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/8d426d48214217a5403017969794d90a.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/a09e404843bada2f9d3468bd553841cf.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/772b77a19b33f295132f91a4f2afd8f6.jpeg)
转载于:https://blog.51cto.com/wangsigui/921052