JpGRAPHP下载地址: http://www.aditus.nu/jpgraph/ 有两个版本, 一个适用PHP 4.0, 还有一个适用PHP 5.1 以上的,如果刚好是PHP 5.0.X 的需要升到5.1以上. (我有试过5.0的运行不起来的).
如果你要用到中文, 需要修改一下配置文件 /src/jpgraph.php
替换 $font_family=FF_FONT1 为 $font_family=FF_SIMSUN
如果你设置的文件编码是UTF-8, 就需要修改掉一些文件里面的代码,不然就会乱码
方法1 在文件 /src/jpgraph_ttf.inc.php
注释掉下面这段代码
// 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);
// }
方法2 文件jpgraph_gb2312.php
function gb2utf8($gb) { //在此之后直接加上下面这句代码
return $gb
语言包:
windows系统在C:/WINDOWS/Fonts/下有所有的语言包
LINUX系统,是要自己指定路径的 如果出现语言包找不到的情况,可以自己新建一个目录并且把语言文件上传上去,并且修改下 /src/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/');
//修改这个路径
}
}
/src/Examples目录下有很多例子,我只画了一个线状图。
require_once('include/jpgraph.php'); //Graph类
require_once('include/jpgraph_line.php'); //LinePlot 类
$aAxisType = 'intlin'; //第一个int是X轴类型第2个lin是Y轴类型
$yScaleMin = 0; //Y轴最小值, 如果不需要设置,可以为空,或者NULL,下同
$yScaleMax = 11; //Y轴最大值
$xScaleMin = 1; //X轴最大值
$xScaleMax = 24; //X轴最大值
$unitType = '月份';
$chartDataTmpArr = array('1' => '1', '2' => '0', '3' => '4', '4' => '5', '5' => '7', '6' => '8', '7' => '4', '8' => '6', '9' => '8', '10' => '7', '11' => '4', '12' => '5', '13' => '4', '14' => '6', '15' => '4', '16' => '2', '17' => '2', '18' => '2', '19' => '2', '20' => '7', '21' => '6', '22' => '1', '23' => '4', '24' => '4');
$chartDataTmpArr2 = array('1' => '2', '2' => '0', '3' => '2', '4' => '2', '5' => '8', '6' => '9', '7' => '5', '8' => '7', '9' => '9', '10' => '7', '11' => '4', '12' => '7', '13' => '2', '14' => '4', '15' => '5', '16' => '6', '17' => '0', '18' => '3', '19' => '6', '20' => '5', '21' => '8', '22' => '9', '23' => '4', '24' => '4');
$graph = new Graph($width = 780 , $height = 400); //创建新的Graph对象
$graph->SetScale($aAxisType, $yScaleMin, $yScaleMax, $xScaleMin, $xScaleMax); //设置刻度模式SetScale($aAxisType,$aYMin=1,$aYMax=1,$aXMin=1,$aXMax=1)
$graph->img->SetMargin(40, 20, 50, 50) ; //设置图表边界
$title = date("Y-m-d H:i:s")."统计图";
$graph->title->SetFont(FF_SIMSUN,FS_BOLD); //设置图表标题的字体类型
$graph->title->Set($wholeTitle);
$graph->title->SetMargin (20);
$graph->xaxis->title->SetFont(FF_SIMSUN);
$graph->xaxis->title->Set($unitType);
$graph->xaxis->title->SetMargin(14);
$graph->legend->SetLineWeight(2); //设置图例文字的字体
$lineplot = new LinePlot($chartDataTmpArr); //创建要画的一地条曲线的对象
$lineplot->SetWeight(2); //曲线的线宽
$lineplot->SetLegend("进入");//设置图例文字
$graph->legend->Pos( 0.025, 0.08, "right","center" ); //图例文字框的位置 0.025,0.08 是以右上角为基准的,0.025是距左右距离,0.08是上下距离。
$graph->legend->SetLayout('1'); //如果有两条曲线,他们的图例文字并排放置。
$graph->legend->SetFrameWeight(0); //图例文字外框边框border设置为0
$graph->legend->SetFillColor('#C8C8C8'); //图例文字框内的填充颜色
$graph->legend->SetShadow('#C8C8C8', 0); //设置图例文字框的阴影部分颜色和border
$lineplot->SetColor("orange"); //设置曲线颜色
$graph->Add($lineplot); //在统计图上绘制曲线
$lineplot2 = new LinePlot($chartDataTmpArr2); //创建一条新的曲线对象
$lineplot2->SetLegend("出去");
$lineplot2->SetWeight(2);
$lineplot2->SetColor("blue");
$graph->Add($lineplot2);
$filename = 'images/strock/'.time().'.png';
$graph->Stroke($filename);
/*如果这里直接调用Stroke()函数,图片会从cache里直接输出,但是有个问题,网页上只能为这个曲线图输出,
别的内容在这个曲线图之前输出就会出错。别的内容放在这个曲线图之后都没输出了。
所以需要传递一个文件名,这样在本地就会存储内容。*/
echo '<img src="'.$filename.'" />';
/* 存放图片的文件夹会有比较多的图片,如果是LINUX服务器的话可以设置一个cronjob,定时清空下图片。
还有另一种方法 比如画图文件为 drawImage.php 可以用另一个文件viewImage.php以内容<img src ="drawImage.php" /> 的方法把图片载入进来,这样可以不用生成图片文件,
而且图片显示位置可以随便放. 不过这样做是有问题的,比如说他要载入的数据是动态的,
那就没办法把那么一大串的数组也都穿进去. 或许可以用serialize 函数来处理一堆的数据,
再在drawImage.php中用unserialize函数还原数据.没试过. */