首頁  >  文章  >  後端開發  >  PHP GD庫動態產生折線圖的實例程式碼

PHP GD庫動態產生折線圖的實例程式碼

WBOY
WBOY原創
2016-07-25 08:55:281513瀏覽
  1. /**
  2. * php GD庫產生折線圖、長條圖、餅狀圖
  3. * by bbs.it-home.org
  4. */
  5. $img_gao=170;
  6. $img_kuan=0;
  7. $jiange=30;//橫座標點與點之間的間隔,產生的圖片寬度會根據傳入資料的多寡而自動變化
  8. $zuo=20;//左側留空
  9. $you=20;//右側留空
  10. $shang=20;//上留空
  11. $xia=20;//下留空
  12. $zuidashujuzhi=1;
  13. $ p_x = array();//點橫座標
  14. $p_y = array();//點縱座標
  15. $y_name=split(",",$_GET["x_name"]);
  16. if ($_GET["a"]=="") die("error id:0");
  17. $shuju=split(",",$_GET["a"]);
  18. //得到縱軸最大值
  19. for($i=0;$i  if(!is_numeric($shuju[$i])) die("error id: 1");
  20.   if($shuju[$i]>$zuidashujuzhi) $zuidashujuzhi=$shuju[$i];
  21. }
  22. //得到圖像寬度
  23. $img_kuan=$zuo+$an=$zuo+$ you+count($shuju)*$jiange;
  24. //然後建立映像資源
  25. $image = imagecreate($img_kuan,$img_gao);
  26. //灰色背景
  27. $white = imagecolorallocate( $image, 0xEE, 0xEE, 0xEE);
  28. //坐標軸用黑色顯示
  29. $zuobiao_yanse = imagecolorallocate($image, 0x00, 0x00, 0x00);
  30. / >$xian_yanse = imagecolorallocate($image, 0x00, 0x00, 0xFF);
  31. //畫座標
  32. //橫軸
  33. imageline ( $image, $zuo, $img_gao-$xkuia, $img_imageline $you/2, $img_gao-$xia, $zuobiao_yanse);
  34. //縱軸
  35. imageline ( $image, $zuo, $shang/2, $zuo, $img_gao-$xia, $zuobiao_yanse) ;
  36. //得到每個點的座標
  37. for($i=0;$i  array_push ($p_x, $zuo+$i*$jiange );
  38.   array_push ($p_y, $shang+round(($img_gao-$shang-$xia)*(1-$shuju[$i]/$zuidashujuzhi)));
  39. }
  40. / /縱軸刻度
  41. imageline ( $image, $zuo, $shang, $zuo+6, $shang, $zuobiao_yanse);
  42. imagestring ( $image, 1, $zuo/4, $shang,$zuidashujuzhihi , $zuobiao_yanse);
  43. imageline ( $image, $zuo, $shang+($img_gao-$shang-$xia)*1/4, $zuo+6, $shang+($img_gao-$shang-$xia) *1/4, $zuobiao_yanse);
  44. imagestring ( $image, 1, $zuo/4, $shang+($img_gao-$shang-$xia)*1/4,$zuidashujuzhi*3/4, $zuobiao_yanse );
  45. imageline ( $image, $zuo, $shang+($img_gao-$shang-$xia)*2/4, $zuo+6, $shang+($img_gao-$shang-$xia)*2/ 4, $zuobiao_yanse);
  46. imagestring ( $image, 1, $zuo/4, $shang+($img_gao-$shang-$xia)*2/4,$zuidashujuzhi*2/4, $zuobiao_yanse);
  47. imageline ( $image, $zuo, $shang+($img_gao-$shang-$xia)*3/4, $zuo+6, $shang+($img_gao-$shang-$xia)*3/4, $ zuobiao_yanse);
  48. imagestring ( $image, 1, $zuo/4, $shang+($img_gao-$shang-$xia)*3/4,$zuidashujuzhi*1/4, $zuobiao_yanse);
  49. /
  50. /
  51. /
  52. /
  53. / /橫軸刻度
  54. for($i=0;$i  imageline ( $image, $zuo+$i*$jiange, $img_gao-$xia, $ zuo+$i*$jiange, $img_gao-$xia-6, $zuobiao_yanse);
  55.   imagestring ( $image, 1, $zuo+$i*$jiange-$jiange/4, $shang+($img_gao-$shang -$xia)+2,$y_name[$i], $zuobiao_yanse);
  56. }
  57. //折線

  58. $shuju_yanse_int=0;
  59. for($i =0;$i  if($i+1count($shuju)){
  60.     imageline ( $image, $p_x[$i], $ p_y[$i], $p_x[$i+1], $p_y[$i+1], $xian_yanse);
  61.     imagefilledrectangle($image, $p_x[$i]-1, $p_y[$i ]-1, $p_x[$i]+1, $p_y[$i]+1, $xian_yanse);
  62.   }
  63. }
  64. //上一個循環沒有畫出最後一點效果,這裡也要追加
  65. 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);
  66. //標註資料值

  67. for($i=0;$i  imagestring ( $image, 3, $p_x[$i]+4, $p_y[$i]-12,$shuju[$i], $zuobiao_yanse);
  68. }
  69. //設定檔頭
  70. header('Content-type: image/png');
  71. //輸出影像
  72. imagepng($image);
  73. //釋放資源
imagedestroy($image);
?>

複製程式碼

二,使用方法 在需要顯示影像的位置插入以下程式碼:
PHP GD庫動態產生折線圖的實例程式碼
複製程式碼

說明: 其中a的值由自己計算得出; a的文字格式是由「,」連接的若干個資料的字串,get方式傳入。 由於在圖形裡寫入中文需要更多PHP環境配置,這裡給出一個html解決方案: 只需要根據資料個數的不同,動態產生一個表格放置橫軸座標刻度名稱即可。

例:

  1. for($i=0;$i  echo "
  2. ";
  3. }
  4. ?>
  5. ".$i."月
複製程式碼


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn