发新话题
打印

php一个很不错的作图类JpGraph

php一个很不错的作图类JpGraph

今天新来的。也不知道写点什么好。想想还是把自己以前写在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();
?>

TOP

发新话题