Heim > Backend-Entwicklung > PHP-Tutorial > PHP 折线图生成函数与示例

PHP 折线图生成函数与示例

WBOY
Freigeben: 2016-07-25 08:55:25
Original
1586 Leute haben es durchsucht
  1. /*
  2. * php生成折线图
  3. * by bbs.it-home.org
  4. */
  5. function line_stats_pic($value_y,$width,$high,$strong=1,$fix=0){
  6. //y值处理函数
  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. //参数处理
  12. $allnum=sizeof($value_y);
  13. $max_num=max($value_y); //最大值
  14. $min_num=min($value_y); //最小值
  15. $limit_m=$max_num-$min_num; //极差
  16. $max_num_add=$max_num+$limit_m*0.1; //轴最大值
  17. $min_num_add=$min_num-$limit_m*0.1; //轴最小值
  18. $limit=$max_num_add-$min_num_add; //极差-坐标轴y
  19. $y_pxdensity=($max_num_add-$min_num_add)/$high; //y轴密度
  20. $x_pxdensity=floor($width/$allnum); //x轴密度
  21. reset($value_y); //将数组指针归零
  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值
  28. $empty_size_x=(strlen($max_num) > strlen($min_num) ? strlen($max_num) : strlen($min_num))*5+3; //左边空白
  29. //图片流开始
  30. header("Content-type:image/png");
  31. $pic=imagecreate($width+$empty_size_x+10,$high+13);
  32. imagecolorallocate($pic,255,255,255); //背景色
  33. $color_1=imagecolorallocate($pic,30,144,255); //线条色
  34. $color_2=imagecolorallocate($pic,0,0,0); //黑色
  35. $color_3=imagecolorallocate($pic,194,194,194);//灰色
  36. //绘制网格
  37. imagesetthickness($pic,1); //网格线宽
  38. $y_line_width=floor($width/100); //纵网格线数目
  39. $y_line_density=$y_line_width==0 ? 0 :floor($width/$y_line_width); //纵网格线密度
  40. $point_zero_y=$zero_y > $high ? $high : $zero_y;
  41. imagestring($pic,1,$empty_size_x-1,$high+4,"0",$color_2); //零点数轴标记
  42. for($i=1;$i imagesetthickness($pic,1); //网格线宽
  43. imageline($pic,$y_line_density*$i+$empty_size_x,0,$y_line_density*$i+$empty_size_x,$high,$color_3);
  44. imagesetthickness($pic,2); //轴点线宽
  45. 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);
  46. imagestring($pic,1,100*$i+$empty_size_x-5,$high+4,$allnum/$y_line_width*$i,$color_2); //数轴标记
  47. }
  48. $x_line_width=floor($high/30); //横网格线数目
  49. $x_line_density=$x_line_width==0 ? 0 :floor($high/$y_line_width); //横网格线密度
  50. if($zero_y > $high){ //绘制横网格线
  51. imagestring($pic,1,0,$high-3,round($min_num_add,$fix),$color_2); //零点数轴标记
  52. for($i=1;$i imagesetthickness($pic,1); //网格线宽
  53. imageline($pic,0+$empty_size_x,$high-$x_line_density*$i,$width+$empty_size_x,$high-$x_line_density*$i,$color_3);
  54. imagesetthickness($pic,2); //轴点线宽
  55. imageline($pic,0+$empty_size_x,$high-$x_line_density*$i,3+$empty_size_x,$high-$x_line_density*$i,$color_2);
  56. imagestring($pic,1,0,$high-$x_line_density*$i-3,round($limit/$x_line_width*$i+$min_num_add,$fix),$color_2); //数轴标记
  57. }
  58. }else{
  59. imagestring($pic,1,$empty_size_x-8,$zero_y,"0",$color_2); //零点数轴标记
  60. for($i=1;$i imagesetthickness($pic,1); //网格线宽
  61. imageline($pic,0+$empty_size_x,$zero_y-$x_line_density*$i,$width+$empty_size_x,$zero_y-$x_line_density*$i,$color_3);
  62. if($zero_y+$x_line_density*$i imageline($pic,0+$empty_size_x,$zero_y+$x_line_density*$i,$width+$empty_size_x,$zero_y+$x_line_density*$i,$color_3);
  63. }
  64. imagesetthickness($pic,2); //轴点线宽
  65. imageline($pic,0+$empty_size_x,$zero_y-$x_line_density*$i,3+$empty_size_x,$zero_y-$x_line_density*$i,$color_2);
  66. if($zero_y+$x_line_density*$i imageline($pic,0+$empty_size_x,$zero_y+$x_line_density*$i,3+$empty_size_x,$zero_y+$x_line_density*$i,$color_2);
  67. }
  68. imagestring($pic,1,0,$zero_y-$x_line_density*$i-3,round($limit/$x_line_width*$i,$fix),$color_2); //数轴标记
  69. if($zero_y+$x_line_density*$i imagestring($pic,1,0,$zero_y+$x_line_density*$i-3,round(-$limit/$x_line_width*$i,$fix),$color_2); //数轴标记
  70. }
  71. }
  72. }
  73. //绘制轴线
  74. imagesetthickness($pic,2); //轴线宽
  75. imageline($pic,1+$empty_size_x,0,1+$empty_size_x,$high,$color_2);
  76. if($zero_y > $high){ //x轴位置
  77. imageline($pic,0+$empty_size_x,$high,$width+$empty_size_x,$high,$color_2);
  78. }else{
  79. imageline($pic,0+$empty_size_x,$zero_y,$width+$empty_size_x,$zero_y,$color_2);
  80. }
  81. //产生折线
  82. $point_x=0;
  83. $j=0;
  84. imagesetthickness($pic,$strong); //线条粗细
  85. while($j+1 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);
  86. $point_x+=$x_pxdensity;
  87. $j++;
  88. }
  89. imagepng($pic);
  90. imagedestroy($pic);
  91. }
  92. for($i=0;$i $value = rand(1,200);
  93. $value_y[]=$value;
  94. }
  95. line_stats_pic($value_y,500,100,1,1);
  96. ?>
复制代码


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage