使用PHP生成数据统计图
在THINKPHP3.2环境下,本文以生成柱状图为例子来阐释,其他图同理调用对应方法即可
JpGraph是一个PHP的图形类库,可以方便地生成各种柱状图,饼图,折线图等等,而且还可以方便地加文字.
步骤:
一、下载官方JpGraph插件包 点击下载
二、使用方法
1.下载好后解压,把/src重命名为 /Jpgraph
2.把Jpgraph放入TP3.2框架下的 \ThinkPHP\Library\Vendor
3. 在控制器中调用就好了
/** * 绘图函数 * @param $title ,表格名称 * @param $str_x ,横坐标名称 * @param $str_y ,纵坐标名称 * @param $data2y ,数据的纵坐标 array注意是数组格式 * @param $data1y ,数据的横坐标 array注意是数组格式 * @param $width ,图长默认500 * @param $height ,图宽默认400 */ protected function draw_pic($title,$str_x,$str_y,$data2y,$data1y,$width=500,$height=400){ // 引入必要的文件,格式:vendor('Jpgraph文件夹.类名') vendor('Jpgraph.jpgraph'); //必须的 vendor('Jpgraph.jpgraph_bar'); //依具体情况引入 // 新建图表 $graph = new \Graph($width,$height); //图片的大小 $graph->SetScale("textlin");//参数勿动,设置刻度模式 $graph->SetShadow(); $graph->img->SetMargin(40,30,20,40);//中间图离表格的距离 // 绘制柱状图 $b1plot = new \BarPlot($data1y); $b1plot->SetFillColor("red");//柱状图下方颜色 $b1plot->value->Show(); $b2plot = new \BarPlot($data2y); $b2plot->SetFillColor("blue");//柱状图上方颜色 $b2plot->value->Show(); // 创建分组的柱状图 $gbplot = new \AccBarPlot(array($b1plot,$b2plot)); // 将柱状图添加到图表上 $graph->Add($gbplot); //其他格式设置 $graph->title->Set($title);//图表名称 // echo $str_x; $str_x=iconv("UTF-8","GB2312//IGNORE",$str_x); $str_y=iconv("UTF-8","GB2312//IGNORE",$str_y); $graph->xaxis->title->Set($str_x);//横坐标名称 $graph->yaxis->title->Set($str_y);//纵坐标名称 $graph->title->SetFont(FF_FONT1,FS_BOLD); $graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); $graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); // 显示图表 $graph->Stroke(); }
</pre><p></p><p></p><p><img src="" alt="" /><span style="white-space:pre"> 调用上边方法</span></p><pre name="code" class="php"> public function index() { $top_y=array(11,2,1,7);//上半柱状坐标 $bottom_y=array(-2,8,9,3);//下半柱状坐标 $this->draw_pic('DISC ','X汉字','Y汉字',$top_y,$bottom_y); }
-------
双柱的图像
/** * 绘图函数 * @param $data_a ,左柱的值 array注意是数组格式 * @param $data1b ,右柱的值 array注意是数组格式 * @param $width ,图长默认500 * @param $height ,图宽默认400 * @param $title ,图表名称,默认为result */ protected function draw_pic($data_a,$data_b,$width=500,$height=400,$title="Result"){ // 引入必要的文件 vendor('Jpgraph.jpgraph'); //载入基本类 vendor('Jpgraph.jpgraph_bar'); //载入柱状图 $graph=new \Graph($width,$height); //创建一个图表 指定大小 $graph->SetScale("textlin"); //设置坐标刻度类型 $graph->img->SetMargin(40,40,30,40);//设置统计图边距 左、右、上、下 $graph->SetMarginColor("lightblue");//设置画布背景色 淡蓝色 // $graph->SetBackgroundImage(TEST_ROOT.'Home/img/gwkj.png',BGIMG_COPY); //设置背景图片 // $graph->img->SetAngle(45); //设置图形在图像中的角度 //设置标题信息 $graph->title->Set($title); //设置统计图标题 $graph->title->SetFont(FF_SIMSUN,FS_BOLD,20); //设置标题字体 $graph->title->SetMargin(5);//设置标题的边距 //设置X轴信息 $str_x=array('D','I','S','C');//横坐标各个坐标点名称 $graph->xaxis->title->Set('(category)'); //标题 $graph->xaxis->title->SetFont(FF_SIMSUN,FS_BOLD,10); //标题字体 大小 $graph->xaxis->title->SetColor('black');//颜色 $graph->xaxis->SetFont(FF_SIMSUN,FS_BOLD,10);//X轴刻度字体 大小 $graph->xaxis->SetColor('black');//X轴刻度颜色 $graph->xaxis->SetTickLabels($str_x); //设置X轴标记 $graph->xaxis->SetLabelAngle(0);//设置X轴的显示值的角度; //设置Y轴的信息 $graph->yaxis->SetFont(FF_SIMSUN,FS_BOLD,10);//标题 $graph->yaxis->SetColor('black');//颜色 $graph->ygrid->SetColor('[email protected]');//X,y交叉表格颜色和透明度 @为程度值 $graph->yaxis->scale->SetGrace(0);//设置Y轴显示值柔韧度 //设置数据 $bplot1 = new \BarPlot($data_a); $bplot2 = new \BarPlot($data_b); //设置柱状图柱颜色和透明度 $bplot1->SetFillColor('[email protected]'); $bplot2->SetFillColor('[email protected]'); //设置值显示 $bplot1->value->Show(); //显示值 $bplot1->value->SetFont(FF_SIMSUN,FS_BOLD,10);//显示字体大小 $bplot1->value->SetAngle(90); //显示角度 $bplot1->value->SetFormat('%0.2f'); //显示格式 0.2f:精确到小属数点后2位 $bplot2->value->Show(); $bplot2->value->SetFont(FF_SIMSUN,FS_BOLD,10); $bplot2->value->SetAngle(90); $bplot2->value->SetFormat('%0.0f'); //设置图列标签 $graph->legend->SetFillColor('[email protected]');//设置图列标签背景颜色和透明度 $graph->legend->Pos(0.01,0.12,"right","center");//位置 $graph->legend->SetFont(FF_SIMSUN,FS_NORMAL,10);//显示字体 大小 $bplot1->SetLegend('A'); $bplot2->SetLegend('B'); //设置每个柱状图的颜色和阴影透明度 $bplot1->SetShadow('[email protected]'); $bplot2->SetShadow('[email protected]'); //生成图列 $gbarplot = new \GroupBarPlot(array($bplot1,$bplot2)); $gbarplot->SetWidth(0.5); //柱状的宽度 $graph->Add($gbarplot); $graph->Stroke(); //输出图像 }
图片出现乱码原因:在绘制图片时,默认会把文字转换成UTF-8,如果默认已经是UTF-8,则是双重UTF8,产生乱码。
解决方法:
<span style="white-space:pre"> </span>$str_x=iconv("UTF-8","GB2312//IGNORE",$str_x); $str_y=iconv("UTF-8","GB2312//IGNORE",$str_y);