您的位置:

深度解析PHP图形库jpgraph

一、jpgraph介绍

JPGraph是一个基于PHP的开源图形库,可以生成各种类型的二维图形,比如条形图、折线图、饼图等等。它使用GD和TrueType字体,能够轻松地呈现优美、可读性强和高质量图表,并且可以轻松导出为PNG、JPEG、GIF和PDF格式。

JPGraph使用非常简单,具有高可扩展性。其主要目的是帮助PHP开发人员创建各种动态图形,尤其是Web应用程序以及系统程序。如果您有兴趣在您的PHP应用程序中使用图形呈现数据,那么JPGraph是一个必不可少的图形库。

下面,我们就逐步深入学习JPGraph - PHP图形库的使用。

二、基础入门

首先,我们需要安装JPGraph。请先下载最新版本。在您的PHP项目中,可以将JPGraph直接引入您的代码中。

以下是一个简单的PHP文件示例:

<?php
require_once ('../src/jpgraph.php');
require_once ('../src/jpgraph_line.php');

$data = array(10,20,30,40,50,60);
$graph = new Graph(300,200);
$graph->SetScale('textlin');
$lineplot = new LinePlot($data);
$graph->Add($lineplot);
$graph->Stroke();
?>

这个示例将生成一条简单折线图。首先我们要引入jpgraph.php文件和我们要使用的类文件,这里是jpgraph_line.php。$data是用于绘制图表的数据,Graph是我们的主要对象,用于实例化和设置图形。在这里我们创造了一个具有递增值的数组,然后与LinePlot类一起添加到Graph对象上。画图是通过使用Stroke方法完成的。

三、常用图表类型

1. 条形图

下面是一个简单的条形图示例:

<?php
require_once ('../src/jpgraph.php');
require_once ('../src/jpgraph_bar.php');

$data = array(20,30,25,45);
$graph = new Graph(350,250);
$graph->SetScale('textlin');
$graph->title->Set('Bar Plot');
$graph->title->SetFont(FF_ARIAL,FS_BOLD);
$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD);
$graph->yaxis->title->Set('Y-axis');
$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD);
$graph->xaxis->title->Set('X-axis');

$plot = new BarPlot($data);
$plot->SetFillColor('orange');
$plot->value->Show();
$graph->Add($plot);

$graph->Stroke();
?>

在这个示例中,我们设置了一些图表属性,如标题、字体和轴的标题。使用Orange颜色来填充条形图,最后添加到Graph对象上。最后,我们画出图形。

2. 折线图

下面是一个简单的折线图示例:

<?php
require_once ('../src/jpgraph.php');
require_once ('../src/jpgraph_line.php');

$data = array(10,20,30,40,50,60);
$graph = new Graph(400,300);
$graph->SetScale('intint');
$graph->yscale->SetAutoMin(0);
$graph->title->Set('Line Plot');
$graph->title->SetFont(FF_ARIAL,FS_BOLD);
$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD);
$graph->yaxis->title->Set('Y-axis');
$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD);
$graph->xaxis->title->Set('X-axis');

$lineplot = new LinePlot($data);
$lineplot->value->SetColor('red');
$lineplot->value->SetFormat('%d');
$lineplot->value->Show();
$graph->Add($lineplot);

$graph->Stroke();
?>

在这个示例中,我们设置了一些图表属性,如标题、字体和轴的标题。使用红色来显示线条和数值,最后添加到Graph对象上。最后,我们画出图形。

3. 饼图

下面是一个简单的饼图示例:

<?php
require_once ('../src/jpgraph.php');
require_once ('../src/jpgraph_pie.php');
require_once ('../src/jpgraph_pie3d.php');

$data = array(30,60,90,125,175);
$graph = new PieGraph(350,250);
$graph->SetShadow();
$graph->title->Set('Pie Plot');
$graph->title->SetFont(FF_ARIAL,FS_BOLD);
$graph->legend->SetFont(FF_ARIAL,FS_NORMAL);
$graph->legend->Pos(0.5,0.7);
$graph->legend->SetColumns(1);

$p1 = new PiePlot($data);
$p1->SetLegends(array('Jan','Feb','Mar','Apr','May'));
$p1->SetSliceColors(array('red','orange','yellow','green','blue'));
$p1->SetCenter(0.5,0.45);
$p1->value->SetFont(FF_ARIAL,FS_NORMAL);
$p1->value->SetColor('black');

$graph->Add($p1);
$graph->Stroke();
?>

在这个示例中,我们设置了一些图表属性,如标题、字体和图例。使用多种颜色来显示饼图,最后添加到PieGraph对象上。最后,我们画出图形。

四、高级应用

1. 多个数据集合并到同一个图形中

下面是一个简单的示例:

<?php
require_once ('../src/jpgraph.php');
require_once ('../src/jpgraph_line.php');

$data = array(
    array(10,20,30,40,50,60),
    array(5,15,25,35,45,55),
    array(30,35,40,45,50,55)
);

$graph = new Graph(400,300);
$graph->SetScale('textlin');
$graph->title->Set('Multiple Line Plot');
$graph->title->SetFont(FF_ARIAL,FS_BOLD);
$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD);
$graph->yaxis->title->Set('Y-axis');
$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD);
$graph->xaxis->title->Set('X-axis');
$graph->yaxis->SetTitleMargin(45);

for($i=0; $i < count($data); $i++){
	$lineplot = new LinePlot($data[$i]);
	$lineplot->SetColor('#'.dechex(rand(0,255)).dechex(rand(0,255)).dechex(rand(0,255)));
	$graph->Add($lineplot);
}

$graph->Stroke();
?>

在这个示例中,我们在同一个图形中集中多个线路。我们可以使用随机颜色来代表它们。

2. 生成图表到不同文件格式

下面是一个简单的示例:

<?php
require_once ('../src/jpgraph.php');
require_once ('../src/jpgraph_pie.php');

$data = array(30,60,90,125,175);
$graph = new PieGraph(350,250);
$graph->SetShadow();
$graph->legend->Pos(0.5,0.7);
$graph->legend->SetColumns(1);

$p1 = new PiePlot($data);
$p1->SetLegends(array('Jan','Feb','Mar','Apr','May'));
$p1->SetSliceColors(array('red','orange','yellow','green','blue'));
$p1->SetCenter(0.5,0.45);
$p1->value->SetFont(FF_ARIAL,FS_NORMAL);
$p1->value->SetColor('black');

$graph->Add($p1);

$name = "pie";
$graph->Stroke($name.".png");
$graph->Stroke($name.".jpeg");
$graph->Stroke($name.".gif");
$graph->Stroke($name.".pdf");
?>

在这个示例中,我们将生成的饼图导出到不同文件格式,包括PNG、JPEG、GIF和PDF。

3. 动态数据绘图

下面是一个简单的示例:

HTML文件:

<?php
require_once ('../src/jpgraph.php');
require_once ('../src/jpgraph_bar.php');

$data = array();

for($i=0; $i<10; $i++){
    $data[] = rand(10,100);
}

$graph = new Graph(600,400);
$graph->SetScale('textlin');
$graph->yscale->SetAutoMin(0);
$graph->title->Set('Dynamic Bar Plot');
$graph->title->SetFont(FF_ARIAL,FS_BOLD);
$graph->yaxis->title->SetFont(FF_ARIAL,FS_BOLD);
$graph->yaxis->title->Set('Y-axis');
$graph->xaxis->title->SetFont(FF_ARIAL,FS_BOLD);
$graph->xaxis->title->Set('X-axis');
$graph->yaxis->SetTitleMargin(45);

$plot = new BarPlot($data);
$plot->SetFillColor('orange');
$plot->value->Show();
$graph->Add($plot);
$graph->Stroke();
?>

JavaScript文件:

<script type="text/javascript">
    setInterval(function(){
        var img = document.getElementById('myGraph');
        img.src = 'graph.php?x='+Math.random();
    }, 5000);
</script>

在这个示例中,我们创建了一个随机数据源来绘制动态图表。在JavaScript文件中,我们使用setInterval方法在每5秒钟生成一个新的随机值,然后更新图像元素。我们可以将graph.php替换为我们的动态数据源。

五、总结

JPGraph是生成动态图形和图表的强大工具。它可以帮助开发人员创建各种类型的图形,如条形图、折线图、饼图等,而且非常容易使用。在本文中,我们详细介绍了JPGraph的基本概念,包括如何绘制不同类型的图表以及如何将它们导出到不同的文件格式中。我们还介绍了一些高级应用,如多个数据集合并到同一个图形中、动态数据绘图等。现在,您可以开始使用JPGraph来创建自己的令人惊叹的图形啦!