千家信息网

Jpgraph使用demo

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,
千家信息网最后更新 2025年02月02日Jpgraph使用demo
img->SetMargin(40,20,20,40);//刻度类型,设置比例 (X 文本比例、Y 线比例)$graph->SetScale('textlin');//设置背景颜色$graph->SetColor('white');//设置外边框背景颜色$graph->SetmarginColor('darkgray');//使用背景阴影$graph->SetShadow();//设置框架颜色$graph->SetFrame(true,'black');/*设置图形标题*///标题文本$graph->title->Set('Sales figures for march');//标题颜色$graph->title->SetColor('white');//标题字体$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);/*构建x轴*///轴标题文本$graph->xaxis->title->Set('Product type');//轴标题颜色$graph->xaxis->title->SetColor('black');//轴标题字体$graph->xaxis->title->SetFont(FF_VERDANA,FS_BOLD,10);//设置标志数据(每个数据的标志)$graph->xaxis->SetTickLabels($xdata);//轴颜色$graph->xaxis->SetColor('black','white');//轴字体$graph->xaxis->SetFont(FF_VERDANA, FS_NORMAL,8);//隐藏十字叉$graph->xaxis->HideTicks();/*构建Y轴*///轴标题文本$graph->yaxis->title->Set('Units Sold');//轴标题颜色$graph->yaxis->title->SetColor('black');//轴标题字体$graph->yaxis->title->SetFont(FF_VERDANA,FS_BOLD,10);//轴颜色$graph->yaxis->SetColor('black','white');//轴字体$graph->yaxis->SetFont(FF_VERDANA, FS_NORMAL,8);//隐藏十字叉$graph->yaxis->HideTicks();/*新建BarPlot对象处理图形中的条状绘制*///传入数据实例图表$bplot = new BarPlot($ydata);//设置条宽度$bplot->SetWidth(0.75);//设置条背景颜色$bplot->SetFillcolor('darkgray');/*将条形图对象添加到图形对象*/$graph->Add($bplot);//发送到浏览器$filename = 'p_w_picpaths/'.time().'.png';  $graph->Stroke($filename);}if($ac=='b'){/********************饼图***********************///图表主类require_once('jpgraph-4.0.2/src/jpgraph_pie.php');require_once('jpgraph-4.0.2/src/jpgraph_pie3d.php');//创建图表数据$xdata = array('Mousemats','Pens','T-Shirts','Mugs');$ydata = array(35,43,15,10);/*创建图形对象*///设置图表宽,高,缓存文件名称$graph = new PieGraph(400,200,'auto');//设置背景颜色$graph->SetMarginColor('white');//使用背景投影$graph->SetShadow();//设置框架颜色$graph->SetFrame(true,'black');/*设置图形标题*/$graph->title->Set('March Sales');//标题颜色$graph->title->SetColor('black');//标题字体$graph->title->SetFont(FF_VERDANA,FS_BOLD,14);/*创建图例标识饼图每部分代表的含义*///图例文本颜色$graph->legend->SetColor('black');//图例背景颜色$graph->legend->SetFillColor('gray');//图例方位$graph->legend->Pos(0.02,0.86);/*创建三维饼图对象*///传入Ydata实例它$pie = new PiePlot3d($ydata);//把Xdata传入图例中$pie->SetLegends($xdata);//设置颜色主题 (earth|pastel|sand|water)$pie->SetTheme('earth');//设置相对X轴的中心$pie->SetCenter(0.36);//设置饼图的半径(单位px)$pie->SetSize(100);//设置标题的角度$pie->SetAngle(30);/*突出显示两个扇形区*///分开成多少片$pie->ExplodeSlice(2);//另一个分开成多少片$pie->ExplodeSlice(3);/*在图形上每个部分旁显示标识该部分的百分比*///设置字体$pie->value->SetFont(FF_VERDANA,FS_NORMAL,10);//字体颜色$pie->value->SetColor('black');/*将饼图对象添加到图形对象并发送到浏览器*/$graph->Add($pie);$filename = 'p_w_picpaths/'.time().'.png';  $graph->Stroke($filename);//输出图像//可以输入文件名创建文件而不输出//例:$graph->Stroke('humble_pie.png');}if($ac=='c'){/****************折线图********************/require_once('jpgraph-4.0.2/src/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(iconv("UTF-8","GB2312//IGNORE",$title));  $graph->title->SetMargin (20);    $graph->xaxis->title->SetFont(FF_SIMSUN,FS_BOLD);  $graph->xaxis->title->Set(iconv("UTF-8","GB2312//IGNORE",$unitType));  $graph->xaxis->title->SetMargin(14);    $graph->legend->SetLineWeight(2); //设置图例文字的字体     $lineplot = new LinePlot($chartDataTmpArr); //创建要画的一地条曲线的对象  $lineplot->SetWeight(2); //曲线的线宽  $lineplot->SetLegend(iconv("UTF-8","GB2312//IGNORE","进入"));//设置图例文字  $graph->legend->Pos( 0.025, 0.08, "right","center" ); //图例文字框的位置 0.025,0.08 是以右上角为基准的,0.025是距左右距离,0.08是上下距离。$graph->legend->SetFont(FF_SIMSUN,FS_BOLD);$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(iconv("UTF-8","GB2312//IGNORE","出去"));  $lineplot2->SetWeight(2);  $lineplot2->SetColor("blue");$graph->legend->SetFont(FF_SIMSUN,FS_BOLD);$graph->Add($lineplot2);    $filename = 'p_w_picpaths/'.time().'.png';  $graph->Stroke($filename);  }





引入了文件.
然后写数据.



[php] view plain copy print?

  1. $ydata = array(11,3,8,12,5,1,9,13,5,7);


设置图表大小.



[php] view plain copy print?

  1. $graph = new Graph(350,250);


刻度类型:

[php] view plain copy print?

  1. $graph->SetScale('textlin');

比如强制如此设置.



[php] view plain copy print?

  1. $graph->SetScale('textlin',0,200);




注入y轴数据,设置颜色.


[php] view plain copy print?

  1. $lineplot=new LinePlot($ydata);

  2. $lineplot->SetColor('blue');



设置两条也是一个道理的.

[php] view plain copy print?

  1. $lineplot=new LinePlot($ydata);

  2. $lineplot->SetColor('blue');

  3. $slineplot=new LinePlot($sydata);

  4. $slineplot->SetColor('red');

  5. $graph->Add($lineplot);

  6. $graph->Add($slineplot);


设置图例:


[php] view plain copy print?

  1. $lineplot->SetLegend('Label 1');

  2. $slineplot->SetLegend('Label 2');




解决中文乱码

取前篇的代码片断如下

//设置图表的标题字体、大小$graph->title->Set("Accumulated bar plots");$graph->xaxis->title->Set("X-title");$graph->yaxis->title->Set("Y-title");//和上面标题对应,设置标题的字体和大小$graph->title->SetFont(FF_FONT1,FS_BOLD);$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

把它改为

//设置图表的标题字体、大小$graph->title->Set(iconv("UTF-8","GB2312//IGNORE","网志博客信息统计表"));$graph->xaxis->title->Set(iconv("UTF-8","GB2312//IGNORE","X-标题"));$graph->yaxis->title->Set(iconv("UTF-8","GB2312//IGNORE","Y-标题"));//和上面标题对应,设置标题的字体和大小$graph->title->SetFont(FF_SIMSUN,FS_BOLD);$graph->yaxis->title->SetFont(FF_SIMSUN,FS_BOLD);$graph->xaxis->title->SetFont(FF_SIMSUN,FS_BOLD);

使用php函数据中文由UTF-8转为GB2312,记住由于iconv本身的一个bug,iconv在转换字符"-"到gb2312时会出错,所以在需要转成的编码后加上 "//IGNORE" 。

FF_SIMSUN表示中文简体,对应的字体文件是simsun.ttc,虽然FF_CHINESE和FF_BIG5也表示中文但是它们对应的字体文件是不同的,所以不要弄错。

当然了,我这里只介绍了一种方法,还有一种就是修改源码,但不推荐。因为我觉得改动源码可能会给其它地方带来意想不到的麻烦。


使用JpGraph,要知道其版本、运行服务器以及操作系统的息息,不能张冠李戴,否则麻烦多多。


生成验证码

require_once('jpgraph-4.0.2/src/jpgraph_antispam.php');$spam = new AntiSpam();$chars = $spam->Rand(4);$spam->Stroke();$spam->Set('my_string');//可以自行指定字符串


0