今天新来的。也不知道写点什么好。想想还是把自己以前写在BLOG上的一篇文章拿来吧。呵呵
PHP绘图类库jpgraph,
下载地址:
http://www.aditus.nu/jpgraph/jpdownload.php
开始以为他不支持中文,所以先在网上找了教程,教程写着要设置字库路径等。结果我下的那个版本一点都不用设置人家就写好了。如果是WIN系统就是根据环境变量找到系统的要目录。在加上“/fonts/”从而自动就找到字体了。
当然如果是UNIX你可以把你WINDOWS/FONTS下的所有的TTF文件和一个simsun.ttc文件传入一个目录上。然后在jpgraph的src目录下找到jpgraph.php文件有一句
DEFINE('TTF_DIR','/usr/X11R6/lib/X11/fonts/truetype/');
改成你上传的那个字体目录就OK了。
在你运行时可能会遇到说错误说你的PHP少FREETYPE2.支持
你可以安装一下FREETYPE并编译进你的PHP。你只要在你的./configure选项加入一个 --with-freetype-dir=/usr/local/include/freetype2 我的freetype2是在这个下面的。你可以看看你安装在哪了。改成你的目录就可以了。
只不过要有写代码时加入一个$graph->xaxis->title->SetFont(FF_SIMSUN,FS_BOLD);
其中FF_SIMSUN就是中文,后面那个是字体的样试。
背景图是可以自己指定的。
这个其实没有什么难点中不过那个右上角的那些中文显示有点难度,因为那个类没有SetFont方法,也就是说那东西是不能显示中文的。所以我就改了基础类库
修改了jpgraph.php文件里的。
class Legend 类中有这样一句
private $font_family=FF_FONT1,$font_style=FS_NORMAL,$font_size=12;
我把他改为
private $font_family=FF_SIMSUN,$font_style=FS_NORMAL,$font_size=8;
就OK了。
我想一定有其它的方法。不过我没有找到。有人找到的话告诉我一下呀。谢谢 。
其它的实现如下
<?php
include ("src/jpgraph.php");
include ("src/jpgraph_bar.php");
// Some data 所有的数据也就是我们想要的数据
$datay1=array(140,110,50,270,78);
$datay2=array(35,90,190,190,56);
$datay3=array(20,60,70,140,34);
// Create the basic graph 设置图片属性
$graph = new Graph(450,250,'auto'); //图片大小
$graph->SetScale("textlin"); //图片类型
$graph->img->SetMargin(40,90,30,40); //margin(填充)左、右、上、下
// Adjust the position of the legend box
$graph->legend->Pos(0.01,0.10); //显示右上角的注释的位置 X,Y
// Adjust the color for theshadow of the legend
$graph->legend->SetShadow('darkgray@0.5'); //是否有阴影 类型@程度值
$graph->legend->SetFillColor('lightblue@0.3'); //填充颜色
// Get localised version of the month names
//var_dump($gDateLocale->GetShortMonth());
$graph->xaxis->SetTickLabels(array("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月")); // X 轴数据
// Set a nice summer (in Stockholm) image //如果有背影图 可以指定
$graph->SetBackgroundImage('stship.jpg',BGIMG_COPY);
// Set axis titles and fonts
$graph->xaxis->title->Set('Year 2006'); //图片最右下角的文字。一般为单位
$graph->xaxis->title->SetFont(FF_SIMSUN,FS_BOLD); //设置字体
//设置X轴的说明。与图片的距离
$graph->xaxis->title->SetMargin(8);
$graph->xaxis->title->SetColor('white');
$graph->xaxis->SetFont(FF_SIMSUN,FS_BOLD);
$graph->xaxis->SetColor('white');
//$graph->yaxis->SetFont(FF_FONT1,FS_BOLD); //设置 Y 轴
$graph->yaxis->title->SetFont(FF_SIMSUN,FS_BOLD);
$graph->yaxis->SetColor('white');
//$graph->ygrid->Show(false);
$graph->ygrid->SetColor('white@0.5');
// Setup graph title 设置标题
$graph->title->Set('会员域名注册量分析');
// Some extra margin (from the top)
$graph->title->SetMargin(3);
$graph->title->SetFont(FF_SIMSUN,FS_BOLD,12);
//创建三个柱图 其中数组$datay1-3是数据
// Create the three var series we will combine
$bplot1 = new BarPlot($datay1);
$bplot2 = new BarPlot($datay2);
$bplot3 = new BarPlot($datay3);
//设置颜色并且有40%的透明度(alpha channel)
// Setup the colors with 40% transparency (alpha channel)
$bplot1->SetFillColor('orange@0.4');
$bplot2->SetFillColor('brown@0.4');
$bplot3->SetFillColor('darkgreen@0.4');
//$bplot1->SetFont(FF_SIMSUN,FS_BOLD);
// Setup legendsSetWidth //设置显示右上角的注释 文字显示
$bplot1->SetLegend('北方区');
$bplot2->SetLegend('华东区');
$bplot3->SetLegend('华南区');
//$bplot1->SetWidth(10);
//$bplot2->SetWidth(10);
//$bplot3->SetWidth(10);
// Setup each bar with a shadow of 50% transparency
$bplot1->SetShadow('black@0.4');
$bplot2->SetShadow('black@0.4');
$bplot3->SetShadow('black@0.4');
//可以让每一个柱的真实数值显示是柱上
$bplot1->value->Show();
$bplot2->value->Show();
$bplot3->value->Show();
//
$gbarplot = new GroupBarPlot(array($bplot1,$bplot2,$bplot3));
//三个柱一个单元。设置这个单元的宽度
$gbarplot->SetWidth(0.6);
$graph->Add($gbarplot);
//显示
$graph->Stroke();
?>