Home >Backend Development >PHP Tutorial >PHP line chart generation functions and examples

PHP line chart generation functions and examples

WBOY
WBOYOriginal
2016-07-25 08:55:251583browse
  1. /*
  2. * php generates line chart
  3. * by bbs.it-home.org
  4. */
  5. function line_stats_pic($value_y,$width,$high,$strong=1,$ fix=0){
  6. //y value processing function
  7. function line_point_y($num,$width,$high,$max_num_add,$min_num_add,$y_pxdensity){
  8. $return=$high-floor(($num-$min_num_add+ $y_pxdensity)/(($max_num_add-$min_num_add)/$high));
  9. return $return;
  10. }
  11. //Parameter processing
  12. $allnum=sizeof($value_y);
  13. $max_num=max($value_y) ; //Maximum value
  14. $min_num=min($value_y); //Minimum value
  15. $limit_m=$max_num-$min_num; //Extreme difference
  16. $max_num_add=$max_num+$limit_m*0.1; //Maximum value of axis
  17. $min_num_add=$min_num-$limit_m*0.1; //Axis minimum value
  18. $limit=$max_num_add-$min_num_add; //Range - coordinate axis y
  19. $y_pxdensity=($max_num_add-$min_num_add)/$high; / /y-axis density
  20. $x_pxdensity=floor($width/$allnum); //x-axis density
  21. reset($value_y); //Reset the array pointer to zero
  22. $i=0;
  23. foreach($value_y as $val ){
  24. $point_y[$i]=line_point_y($val,$width,$high,$max_num_add,$min_num_add,$y_pxdensity);
  25. $i++;
  26. }
  27. $zero_y=line_point_y(0,$width,$high ,$max_num_add,$min_num_add,$y_pxdensity); //Y value at zero point
  28. $empty_size_x=(strlen($max_num) > strlen($min_num) ? strlen($max_num) : strlen($min_num))*5+ 3; //The left blank
  29. //The image stream starts
  30. header("Content-type:image/png");
  31. $pic=imagecreate($width+$empty_size_x+10,$high+13);
  32. imagecolorallocate($ pic,255,255,255); //Background color
  33. $color_1=imagecolorallocate($pic,30,144,255); //Line color
  34. $color_2=imagecolorallocate($pic,0,0,0); //Black
  35. $color_3=imagecolorallocate( $pic,194,194,194); //Gray
  36. //Draw grid
  37. imagesethickness($pic,1); //Grid line width
  38. $y_line_width=floor($width/100); //Number of vertical grid lines
  39. $y_line_density=$y_line_width==0 ? 0 :floor($width/$y_line_width); //Vertical grid line density
  40. $point_zero_y=$zero_y > $high ? $high : $zero_y;
  41. imagestring($pic, 1,$empty_size_x-1,$high+4,"0",$color_2); //Zero point axis mark
  42. for($i=1;$i <= $y_line_width;$i++){ //Draw vertical network Grid line
  43. imagesethickness($pic,1); //Grid line width
  44. imageline($pic,$y_line_density*$i+$empty_size_x,0,$y_line_density*$i+$empty_size_x,$high,$color_3);
  45. imagesethickness ($pic,2); //Axis point line width
  46. imageline($pic,$y_line_density*$i+$empty_size_x,$point_zero_y-4,$y_line_density*$i+$empty_size_x,$point_zero_y,$color_2);
  47. imagestring( $pic,1,100*$i+$empty_size_x-5,$high+4,$allnum/$y_line_width*$i,$color_2); //Axis markers
  48. }
  49. $x_line_width=floor($high/30); // Number of horizontal grid lines
  50. $x_line_density=$x_line_width==0 ? 0 :floor($high/$y_line_width); //Density of horizontal grid lines
  51. if($zero_y > $high){ //Draw horizontal grid Line
  52. imagestring($pic,1,0,$high-3,round($min_num_add,$fix),$color_2); //Zero point axis mark
  53. for($i=1;$i <= $x_line_width; $i++){
  54. imagesethickness($pic,1); //Grid line width
  55. imageline($pic,0+$empty_size_x,$high-$x_line_density*$i,$width+$empty_size_x,$high-$x_line_density* $i,$color_3);
  56. imagesethickness($pic,2); //axis point line width
  57. imageline($pic,0+$empty_size_x,$high-$x_line_density*$i,3+$empty_size_x,$high- $x_line_density*$i,$color_2);
  58. imagestring($pic,1,0,$high-$x_line_density*$i-3,round($limit/$x_line_width*$i+$min_num_add,$fix),$color_2 ); //Number axis label
  59. }
  60. }else{
  61. imagestring($pic,1,$empty_size_x-8,$zero_y,"0",$color_2); //Zero point axis label
  62. for($i=1;$ i <= ceil($x_line_width/2);$i++){
  63. imagesethickness($pic,1); //Grid line width
  64. imageline($pic,0+$empty_size_x,$zero_y-$x_line_density*$i ,$width+$empty_size_x,$zero_y-$x_line_density*$i,$color_3);
  65. if($zero_y+$x_line_density*$i < $high){
  66. imageline($pic,0+$empty_size_x,$zero_y+$x_line_density *$i,$width+$empty_size_x,$zero_y+$x_line_density*$i,$color_3);
  67. }
  68. imagesethickness($pic,2); //axis point line width
  69. imageline($pic,0+$empty_size_x,$ zero_y-$x_line_density*$i,3+$empty_size_x,$zero_y-$x_line_density*$i,$color_2);
  70. if($zero_y+$x_line_density*$i < $high){
  71. imageline($pic,0+ $empty_size_x,$zero_y+$x_line_density*$i,3+$empty_size_x,$zero_y+$x_line_density*$i,$color_2);
  72. }
  73. imagestring($pic,1,0,$zero_y-$x_line_density*$i-3 ,round($limit/$x_line_width*$i,$fix),$color_2); //Number axis label
  74. if($zero_y+$x_line_density*$i < $high){
  75. imagestring($pic,1,0, $zero_y+$x_line_density*$i-3,round(-$limit/$x_line_width*$i,$fix),$color_2); //Axis markers
  76. }
  77. }
  78. }
  79. //绘制轴线
  80. imagesetthickness($pic,2); //轴线宽
  81. imageline($pic,1+$empty_size_x,0,1+$empty_size_x,$high,$color_2);
  82. if($zero_y > $high){ //x轴位置
  83. imageline($pic,0+$empty_size_x,$high,$width+$empty_size_x,$high,$color_2);
  84. }else{
  85. imageline($pic,0+$empty_size_x,$zero_y,$width+$empty_size_x,$zero_y,$color_2);
  86. }
  87. //产生折线
  88. $point_x=0;
  89. $j=0;
  90. imagesetthickness($pic,$strong); //线条粗细
  91. while($j+1 < $allnum){
  92. imageline($pic,$point_x+2+$empty_size_x,$point_y[$j],$point_x+$x_pxdensity+2+$empty_size_x,$point_y[$j+1],$color_1);
  93. $point_x+=$x_pxdensity;
  94. $j++;
  95. }
  96. imagepng($pic);
  97. imagedestroy($pic);
  98. }
  99. for($i=0;$i<100;$i++){
  100. $value = rand(1,200);
  101. $value_y[]=$value;
  102. }
  103. line_stats_pic($value_y,500,100,1,1);
  104. ?>
复制代码


Statement:
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