JpGraph生成图表

使用PHP生成数据统计图

在THINKPHP3.2环境下,本文以生成柱状图为例子来阐释,其他图同理调用对应方法即可


JpGraph是一个PHP的图形类库,可以方便地生成各种柱状图,饼图,折线图等等,而且还可以方便地加文字.


步骤:

一、下载官方JpGraph插件包   点击下载

JpGraph生成图表_第1张图片

二、使用方法


1.下载好后解压,把/src重命名为 /Jpgraph



2.把Jpgraph放入TP3.2框架下的  \ThinkPHP\Library\Vendor

JpGraph生成图表_第2张图片

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);
        }



5.打开 index页面,则产生对应图标,效果如下:



-------

双柱的图像

 /**
     * 绘图函数
     * @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);




你可能感兴趣的:(JpGraph生成图表)