清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | /****************************** * 折线图生成函数 ******************************/ function line_stats_pic ( $value_y , $width , $high , $strong =1, $fix =0 ) { //y值处理函数 function line_point_y ( $num , $width , $high , $max_num_add , $min_num_add , $y_pxdensity ) { $return = $high - floor ( ( $num - $min_num_add + $y_pxdensity ) / ( ( $max_num_add - $min_num_add ) / $high ) ); return $return ; } //参数处理 $allnum =sizeof ( $value_y ); $max_num =max ( $value_y ); //最大值 $min_num =min ( $value_y ); //最小值 $limit_m = $max_num - $min_num ; //极差 $max_num_add = $max_num + $limit_m *0.1; //轴最大值 $min_num_add = $min_num - $limit_m *0.1; //轴最小值 $limit = $max_num_add - $min_num_add ; //极差-坐标轴y $y_pxdensity = ( $max_num_add - $min_num_add ) / $high ; //y轴密度 $x_pxdensity = floor ( $width / $allnum ); //x轴密度 reset ( $value_y ); //将数组指针归零 $i =0; foreach ( $value_y as $val ) { $point_y [ $i ]=line_point_y ( $val , $width , $high , $max_num_add , $min_num_add , $y_pxdensity ); $i ++; } $zero_y =line_point_y ( 0, $width , $high , $max_num_add , $min_num_add , $y_pxdensity ); //零点的y值 $empty_size_x = ( strlen ( $max_num ) > strlen ( $min_num ) ? strlen ( $max_num ) : strlen ( $min_num ) ) *5+3; //左边空白 //图片流开始 header ( "Content-type:image/png" ); $pic =imagecreate ( $width + $empty_size_x +10, $high +13 ); imagecolorallocate ( $pic ,255,255,255 ); //背景色 $color_1 =imagecolorallocate ( $pic ,30,144,255 ); //线条色 $color_2 =imagecolorallocate ( $pic ,0,0,0 ); //黑色 $color_3 =imagecolorallocate ( $pic ,194,194,194 ); //灰色 //绘制网格 imagesetthickness ( $pic ,1 ); //网格线宽 $y_line_width = floor ( $width /100 ); //纵网格线数目 $y_line_density = $y_line_width ==0 ? 0 : floor ( $width / $y_line_width ); //纵网格线密度 $point_zero_y = $zero_y > $high ? $high : $zero_y ; imagestring ( $pic ,1, $empty_size_x -1, $high +4, "0" , $color_2 ); //零点数轴标记 for ( $i =1; $i <= $y_line_width ; $i ++ ) //绘制纵网格线 { imagesetthickness ( $pic ,1 ); //网格线宽 imageline ( $pic , $y_line_density * $i + $empty_size_x ,0, $y_line_density * $i + $empty_size_x , $high , $color_3 ); imagesetthickness ( $pic ,2 ); //轴点线宽 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 ); imagestring ( $pic ,1,100* $i + $empty_size_x -5, $high +4, $allnum / $y_line_width * $i , $color_2 ); //数轴标记 } $x_line_width = floor ( $high /30 ); //横网格线数目 $x_line_density = $x_line_width ==0 ? 0 : floor ( $high / $y_line_width ); //横网格线密度 if ( $zero_y > $high ) //绘制横网格线 { imagestring ( $pic ,1,0, $high -3, round ( $min_num_add , $fix ), $color_2 ); //零点数轴标记 for ( $i =1; $i <= $x_line_width ; $i ++ ) { imagesetthickness ( $pic ,1 ); //网格线宽 imageline ( $pic ,0+ $empty_size_x , $high - $x_line_density * $i , $width + $empty_size_x , $high - $x_line_density * $i , $color_3 ); imagesetthickness ( $pic ,2 ); //轴点线宽 imageline ( $pic ,0+ $empty_size_x , $high - $x_line_density * $i ,3+ $empty_size_x , $high - $x_line_density * $i , $color_2 ); imagestring ( $pic ,1,0, $high - $x_line_density * $i -3, round ( $limit / $x_line_width * $i + $min_num_add , $fix ), $color_2 ); //数轴标记 } } else { imagestring ( $pic ,1, $empty_size_x -8, $zero_y , "0" , $color_2 ); //零点数轴标记 for ( $i =1; $i <= ceil ( $x_line_width /2 ); $i ++ ) { imagesetthickness ( $pic ,1 ); //网格线宽 imageline ( $pic ,0+ $empty_size_x , $zero_y - $x_line_density * $i , $width + $empty_size_x , $zero_y - $x_line_density * $i , $color_3 ); if ( $zero_y + $x_line_density * $i < $high ) { imageline ( $pic ,0+ $empty_size_x , $zero_y + $x_line_density * $i , $width + $empty_size_x , $zero_y + $x_line_density * $i , $color_3 ); } imagesetthickness ( $pic ,2 ); //轴点线宽 imageline ( $pic ,0+ $empty_size_x , $zero_y - $x_line_density * $i ,3+ $empty_size_x , $zero_y - $x_line_density * $i , $color_2 ); if ( $zero_y + $x_line_density * $i < $high ) { imageline ( $pic ,0+ $empty_size_x , $zero_y + $x_line_density * $i ,3+ $empty_size_x , $zero_y + $x_line_density * $i , $color_2 ); } imagestring ( $pic ,1,0, $zero_y - $x_line_density * $i -3, round ( $limit / $x_line_width * $i , $fix ), $color_2 ); //数轴标记 if ( $zero_y + $x_line_density * $i < $high ) { imagestring ( $pic ,1,0, $zero_y + $x_line_density * $i -3, round ( - $limit / $x_line_width * $i , $fix ), $color_2 ); //数轴标记 } } } //绘制轴线 imagesetthickness ( $pic ,2 ); //轴线宽 imageline ( $pic ,1+ $empty_size_x ,0,1+ $empty_size_x , $high , $color_2 ); if ( $zero_y > $high ) //x轴位置 { imageline ( $pic ,0+ $empty_size_x , $high , $width + $empty_size_x , $high , $color_2 ); } else { imageline ( $pic ,0+ $empty_size_x , $zero_y , $width + $empty_size_x , $zero_y , $color_2 ); } //产生折线 $point_x =0; $j =0; imagesetthickness ( $pic , $strong ); //线条粗细 while ( $j +1 < $allnum ) { 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 ); $point_x += $x_pxdensity ; $j ++; } imagepng ( $pic ); imagedestroy ( $pic ); } /* 函数描述及例子 参数说明: $value_y -------- 包含你想生成折线图的数组,要求键值从0开始递增。 $width--------生成的折线图的网格宽度(不算白边) $high--------高度 $strong-------线条粗细(默认为1) $fix-------数据保留的位数(默认为取整) */ for ( $i =0; $i <100; $i ++ ) { $value = rand ( 1,200 ); $value_y []= $value ; } line_stats_pic ( $value_y ,500,100,1,1 ); ?> |