文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>如何使用PHP动态生成饼状图、柱状图和折线图

如何使用PHP动态生成饼状图、柱状图和折线图

时间:2006-09-12  来源:liuxingyuyuni


如何使用PHP动态生成饼状图、柱状图和折线图
2004.10 臧士睿 qq:10743383
网络转载请保留作者声明,盈利性印刷刊物转载请联系
[email protected]
所有内容:
如何使用PHP动态生成饼状图、折线图和柱状图
专题讨论区:
http://hh.cc163.com/form/
主页:
http://hh.cc163.com/

目录




    • 饼装图


    • 设计思路


    • 实现过程


    • 使用方法


    • 实现效果


    • 折线图


    • 设计思路


    • 实现过程


    • 使用方法


    • 实现效果


    • 柱状图


    • 设计思路


    • 实现过程


    • 使用方法


    • 实现效果


    • 参考文献


    • 相关链接



      PHP在图像操作方面的表现非常出色,我们只需借助可以免费得到的GD库便可以轻松实现图、表勾画。下面将分别介绍笔者实现的饼状图、折线图和柱状图以及他们的使用方法,这几段代码的特点就是不需要再把它们复制到你的代码之中,只需要把计算得到的数据作为参数传入,即可得到相应的图形效果
      开发环境:PHP Version 4.3.6+GD Version bundled (2.0.22 compatible)
      本文适宜初学PHP编程的朋友阅读,用于初步了解PHP操作图像的原理
      作者推荐实用的免费软件 JpGraph 官方网站:
      http://www.aditus.nu/jpgraph/
      作者水平有限,文章中难免存在错误,我将非常感激您的指正

      饼状图
      设计思路
      饼状图表对于查看一个值占总值的百分比是一个好的方法。我们就用PHP来实现一个饼形图表。
      它的设计思想是:
      1 接受参数,得到所有数值的和,得到每一个值占数值总和的比例。
      2 根据比例计算每一个色块在图中的圆周角度
      3 要产生立体效果,只需要用深颜色画出阴影就可以了
      实现过程
      $tugao/2-5; $h--) {
        $kaishi=0;
        $jieshu=0;
        for ($i = 0; $i
      使用方法
      在需要显示图像的位置插入如下代码
      a的文本格式是由“,”连接的若干个数据的字符串,get方式传入。
      颜色图例如下,请自行排列:




















      实现效果



      折线图
      设计思路
      用折线图表查看某一数据在单位时段内的变化趋势是一个好的选择。我们就用PHP来实现一个动态折线图表。
      它的设计思想是:
      1 接受参数,得到所有数值的和,得到数据的最大值以确定纵轴的最大刻度值
      2 根据数据个数确定图像的宽度,并画出横轴和纵轴坐标及刻度
      3 画直线连接各点,为每个点填充一个2*2的矩形,突出点的位置
      4 在每个点的右上方标注每个点的数据值
      实现过程
      $zuidashujuzhi) $zuidashujuzhi=$shuju[$i];
      }
      //得到图像宽度
      $img_kuan=$zuo+$you+count($shuju)*$jiange;
      //然后创建图像资源
      $image = imagecreate($img_kuan,$img_gao);
      //灰色背景
      $white = imagecolorallocate($image, 0xEE, 0xEE, 0xEE);
      //坐标轴用黑色显示
      $zuobiao_yanse = imagecolorallocate($image, 0x00, 0x00, 0x00);
      //折线用蓝色显示
      $xian_yanse = imagecolorallocate($image, 0x00, 0x00, 0xFF);
      //画坐标
      //横轴
      imageline ( $image, $zuo, $img_gao-$xia, $img_kuan-$you/2, $img_gao-$xia, $zuobiao_yanse);
      //纵轴
      imageline ( $image, $zuo, $shang/2, $zuo, $img_gao-$xia, $zuobiao_yanse);
      //得到每个点的坐标
      for($i=0;$icount($shuju)){
          imageline ( $image, $p_x[$i], $p_y[$i], $p_x[$i+1], $p_y[$i+1], $xian_yanse);
          imagefilledrectangle($image, $p_x[$i]-1, $p_y[$i]-1, $p_x[$i]+1, $p_y[$i]+1, $xian_yanse);
        }
      }
      //上一个循环没有画出最后一个点效果,这里还要追加
      imagefilledrectangle($image, $p_x[count($shuju)-1]-1, $p_y[count($shuju)-1]-1, $p_x[count($shuju)-1]+1, $p_y[count($shuju)-1]+1, $xian_yanse);
      //标注数据值
      for($i=0;$i
      使用方法
      在需要显示图像的位置插入如下代码
      其中a的值由你自己计算得出
      a的文本格式是由“,”连接的若干个数据的字符串,get方式传入。
      由于往图形里写入中文需要更多PHP环境配置,所以这里给出一个html解决方案,实用也很灵活:
      大家只需要根据数据个数的不同,动态生成一个表格放置横轴坐标刻度名称就行了,像这样

      ".$i."月";
      }
      ?>

      实现效果



      柱状图
      设计思路
    • 还是要首先确定纵轴的刻度值,确定纵轴的刻度最大值
    • 然后根据得到的数据个数确定图像的宽度,这时就可以创建图像了
    • 计算每个色柱的高度,用高度可以计算出色柱的填充范围
    • 用直线画出坐标轴,标注刻度值
    • 用矩形填充色柱,并在色柱上方标注数据值
    • 用Html方式画出需要的横轴坐标名称
      实现过程
      $zuidashujuzhi) $zuidashujuzhi=$shuju[$i];
      }
      //计算图像宽度
      $img_kuan=$zuo+$you+$jiange+count($shuju)*($kuan+$jiange);
      //图像高
      $img_gao=170;
      //存储色柱高度的数组
      $zhugaodu = array();
      $image = imagecreate($img_kuan,$img_gao);
      $white = imagecolorallocate($image, 0xEE, 0xEE, 0xEE);
      //色柱颜色
      $shuju_yanse =array(
        imagecolorallocate($image, 0x97, 0xbd, 0x00),
        imagecolorallocate($image, 0x00, 0x99, 0x00),
        imagecolorallocate($image, 0xcc, 0x33, 0x00),
        imagecolorallocate($image, 0xff, 0xcc, 0x00),
        imagecolorallocate($image, 0x33, 0x66, 0xcc),
        imagecolorallocate($image, 0x33, 0xcc, 0x33),
        imagecolorallocate($image, 0xff, 0x99, 0x33),
        imagecolorallocate($image, 0xcc, 0xcc, 0x99),
        imagecolorallocate($image, 0x99, 0xcc, 0x66),
        imagecolorallocate($image, 0x66, 0xff, 0x99)
      );
      //坐标轴颜色
      $zuobiao_yanse = imagecolorallocate($image, 0x00, 0x00, 0x00);
      //横轴
      imageline ( $image, $zuo, $img_gao-$xia, $img_kuan-$you/2, $img_gao-$xia, $zuobiao_yanse);
      //纵轴
      imageline ( $image, $zuo, $shang/2, $zuo, $img_gao-$xia, $zuobiao_yanse);
      //纵轴刻度,纵轴上共标注4个点,所以这里分别计算即可
      imageline ( $image, $zuo, $shang, $zuo+6, $shang, $zuobiao_yanse);
      imagestring ( $image, 3, $zuo/4, $shang,round($zuidashujuzhi), $zuobiao_yanse);
      imageline ( $image, $zuo, $shang+($img_gao-$shang-$xia)*1/4, $zuo+6, round($shang+($img_gao-$shang-$xia)*1/4), $zuobiao_yanse);
      imagestring ( $image, 3, $zuo/4, $shang+($img_gao-$shang-$xia)*1/4,round($zuidashujuzhi*3/4), $zuobiao_yanse);
      imageline ( $image, $zuo, $shang+($img_gao-$shang-$xia)*2/4, $zuo+6, $shang+($img_gao-$shang-$xia)*2/4, $zuobiao_yanse);
      imagestring ( $image, 3, $zuo/4, $shang+($img_gao-$shang-$xia)*2/4,round($zuidashujuzhi*2/4), $zuobiao_yanse);
      imageline ( $image, $zuo, $shang+($img_gao-$shang-$xia)*3/4, $zuo+6, $shang+($img_gao-$shang-$xia)*3/4, $zuobiao_yanse);
      imagestring ( $image, 3, $zuo/4, $shang+($img_gao-$shang-$xia)*3/4,round($zuidashujuzhi*1/4), $zuobiao_yanse);
      //得到每个柱的高度
      for($i=0;$i
      使用方法
      在需要显示图像的位置插入如下代码
      其中a的值由你自己计算得出
      a的文本格式是由“,”连接的若干个数据的字符串,get方式传入。
      同样使用一个html解决方案,解决横轴刻度名称的问题:
      根据数据个数的不同,动态生成一个表格放置横轴坐标刻度名称就行了,像这样

      ".$i."月";
      }
      ?>

      实现效果



      参考文献
      PHP 手册
      http://www.php.net/docs.php


      相关链接
      原文完整版
      http://hh.cc163.com/php/phpimagehowto/default.htm

      所有内容下载:
      http://hh.cc163.com/php/phpimagehowto/phpimagehowto.rar
      讨论区
      http://hh.cc163.com/form/
      主页
      http://hh.cc163.com/


  • 相关阅读 更多 +
    排行榜 更多 +
    辰域智控app

    辰域智控app

    系统工具 下载
    网医联盟app

    网医联盟app

    运动健身 下载
    汇丰汇选App

    汇丰汇选App

    金融理财 下载