Example code for dynamically generating line charts with PHP GD library

WBOY
Release: 2016-07-25 08:55:28
Original
1510 people have browsed it
  1. /**

  2. * php GD library generates line charts, bar charts, and pie charts
  3. * by bbs.it-home.org
  4. */
  5. $img_gao=170;
  6. $img_kuan=0;
  7. $jiange=30;//The abscissa between points Interval, the width of the generated image will automatically change according to the amount of incoming data
  8. $zuo=20;//Leave blank on the left side
  9. $you=20;//Leave blank on the right side
  10. $shang=20;//Leave it on the top Empty
  11. $xia=20;//Leave blank
  12. $zuidashujuzhi=1;
  13. $p_x = array();//Point abscissa
  14. $p_y = array();//Point ordinate
  15. $y_name=split( ",",$_GET["x_name"]);
  16. if ($_GET["a"]=="") die("error id:0");
  17. $shuju=split(",",$_GET ["a"]);
  18. //Get the maximum value on the vertical axis
  19. for($i=0;$i if(!is_numeric($shuju[$i])) die("error id:1");
  20.  if($shuju[$i]>$zuidashujuzhi) $zuidashujuzhi=$shuju[$i];
  21. }
  22. //Get the image width
  23. $img_kuan=$zuo+$you +count($shuju)*$jiange;
  24. //Then create image resources
  25. $image = imagecreate($img_kuan,$img_gao);
  26. //Gray background
  27. $white = imagecolorallocate($image, 0xEE, 0xEE, 0xEE) ;
  28. //The coordinate axis is displayed in black
  29. $zuobiao_yanse = imagecolorallocate($image, 0x00, 0x00, 0x00);
  30. //The polyline is displayed in blue
  31. $xian_yanse = imagecolorallocate($image, 0x00, 0x00, 0xFF);
  32. //Draw coordinates
  33. //Horizontal axis
  34. imageline ($image, $zuo, $img_gao-$xia, $img_kuan-$you/2, $img_gao-$xia, $zuobiao_yanse);
  35. //Vertical axis
  36. imageline ( $image, $zuo, $shang/2, $zuo, $img_gao-$xia, $zuobiao_yanse);
  37. //Get the coordinates of each point
  38. for($i=0;$i array_push ($p_x, $zuo+$i*$jiange);
  39.  array_push ($p_y, $shang+round(($img_gao-$shang-$xia)*(1-$shuju[$i] /$zuidashujuzhi)));
  40. }
  41. //Vertical axis scale
  42. imageline ( $image, $zuo, $shang, $zuo+6, $shang, $zuobiao_yanse);
  43. imagestring ( $image, 1, $zuo/ 4, $shang,$zuidashujuzhi, $zuobiao_yanse);
  44. imageline ( $image, $zuo, $shang+($img_gao-$shang-$xia)*1/4, $zuo+6, $shang+($img_gao-$ shang-$xia)*1/4, $zuobiao_yanse);
  45. imagestring ( $image, 1, $zuo/4, $shang+($img_gao-$shang-$xia)*1/4,$zuidashujuzhi*3/4 , $zuobiao_yanse);
  46. imageline ( $image, $zuo, $shang+($img_gao-$shang-$xia)*2/4, $zuo+6, $shang+($img_gao-$shang-$xia)*2 /4, $zuobiao_yanse);
  47. imagestring ($image, 1, $zuo/4, $shang+($img_gao-$shang-$xia)*2/4,$zuidashujuzhi*2/4, $zuobiao_yanse);
  48. imageline ($image, $zuo, $shang+($img_gao-$shang-$xia)*3/4, $zuo+6, $shang+($img_gao-$shang-$xia)*3/4, $zuobiao_yanse);
  49. imagestring ($image, 1, $zuo/4, $shang+($img_gao-$shang-$xia)*3/4,$zuidashujuzhi*1/4, $zuobiao_yanse);
  50. //Horizontal axis scale
  51. for( $i=0;$i imageline ( $image, $zuo+$i*$jiange, $img_gao-$xia, $zuo+$i*$jiange, $img_gao-$ xia-6, $zuobiao_yanse);
  52.  imagestring ( $image, 1, $zuo+$i*$jiange-$jiange/4, $shang+($img_gao-$shang-$xia)+2,$y_name[$i] , $zuobiao_yanse);
  53. }

  54. //Polyline

  55. $shuju_yanse_int=0;
  56. for($i=0;$i if( $i+1<>count($shuju)){
  57.   imageline ( $image, $p_x[$i], $p_y[$i], $p_x[$i+1], $p_y[$i+1 ], $xian_yanse);
  58.    imagefilledrectangle($image, $p_x[$i]-1, $p_y[$i]-1, $p_x[$i]+1, $p_y[$i]+1, $xian_yanse );
  59.  }
  60. }
  61. //The last loop did not draw the last point effect, here we need to add
  62. 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);

  63. //Mark data values

  64. for($i=0;$i imagestring ( $image, 3, $p_x[$i]+4, $p_y[$i]- 12,$shuju[$i], $zuobiao_yanse);
  65. }
  66. //Set the file header
  67. header('Content-type: image/png');
  68. //Output image
  69. imagepng($image);
  70. / /Release resources
  71. imagedestroy($image);
  72. ?>

Copy code

Second, how to use Insert the following code where the image needs to be displayed:

Copy code

Instructions: The value of a is calculated by yourself; The text format of a is a string of several data connected by ",", which is passed in through the get method. Since writing Chinese into graphics requires more PHP environment configuration, here is an HTML solution: You only need to dynamically generate a table to place the horizontal axis coordinate scale names based on the number of data.

Example:

  1. for($ i=0;$i<12;$i++) {
  2.  echo "
  3. ";
  4. }
  5. ?>
  6. ".$i."月
Copy code


source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template