-
-
- /**
- * php GD庫產生折線圖、長條圖、餅狀圖
- * by bbs.it-home.org
- */
- $img_gao=170;
- $img_kuan=0;
- $jiange=30;//橫座標點與點之間的間隔,產生的圖片寬度會根據傳入資料的多寡而自動變化
- $zuo=20;//左側留空
- $you=20;//右側留空
- $shang=20;//上留空
- $xia=20;//下留空
- $zuidashujuzhi=1;
- $ p_x = array();//點橫座標
- $p_y = array();//點縱座標
- $y_name=split(",",$_GET["x_name"]);
- if ($_GET["a"]=="") die("error id:0");
- $shuju=split(",",$_GET["a"]);
- //得到縱軸最大值
- for($i=0;$i if(!is_numeric($shuju[$i])) die("error id: 1");
- if($shuju[$i]>$zuidashujuzhi) $zuidashujuzhi=$shuju[$i];
- }
- //得到圖像寬度
- $img_kuan=$zuo+$an=$zuo+$ you+count($shuju)*$jiange;
- //然後建立映像資源
- $image = imagecreate($img_kuan,$img_gao);
- //灰色背景
- $white = imagecolorallocate( $image, 0xEE, 0xEE, 0xEE);
- //坐標軸用黑色顯示
- $zuobiao_yanse = imagecolorallocate($image, 0x00, 0x00, 0x00);
- / >$xian_yanse = imagecolorallocate($image, 0x00, 0x00, 0xFF);
- //畫座標
- //橫軸
- imageline ( $image, $zuo, $img_gao-$xkuia, $img_imageline $you/2, $img_gao-$xia, $zuobiao_yanse);
- //縱軸
- imageline ( $image, $zuo, $shang/2, $zuo, $img_gao-$xia, $zuobiao_yanse) ;
- //得到每個點的座標
- for($i=0;$i array_push ($p_x, $zuo+$i*$jiange );
- array_push ($p_y, $shang+round(($img_gao-$shang-$xia)*(1-$shuju[$i]/$zuidashujuzhi)));
- }
- / /縱軸刻度
- imageline ( $image, $zuo, $shang, $zuo+6, $shang, $zuobiao_yanse);
- imagestring ( $image, 1, $zuo/4, $shang,$zuidashujuzhihi , $zuobiao_yanse);
- imageline ( $image, $zuo, $shang+($img_gao-$shang-$xia)*1/4, $zuo+6, $shang+($img_gao-$shang-$xia) *1/4, $zuobiao_yanse);
- imagestring ( $image, 1, $zuo/4, $shang+($img_gao-$shang-$xia)*1/4,$zuidashujuzhi*3/4, $zuobiao_yanse );
- imageline ( $image, $zuo, $shang+($img_gao-$shang-$xia)*2/4, $zuo+6, $shang+($img_gao-$shang-$xia)*2/ 4, $zuobiao_yanse);
- imagestring ( $image, 1, $zuo/4, $shang+($img_gao-$shang-$xia)*2/4,$zuidashujuzhi*2/4, $zuobiao_yanse);
- imageline ( $image, $zuo, $shang+($img_gao-$shang-$xia)*3/4, $zuo+6, $shang+($img_gao-$shang-$xia)*3/4, $ zuobiao_yanse);
- imagestring ( $image, 1, $zuo/4, $shang+($img_gao-$shang-$xia)*3/4,$zuidashujuzhi*1/4, $zuobiao_yanse);
- /
- /
- /
- /
- / /橫軸刻度
- for($i=0;$i imageline ( $image, $zuo+$i*$jiange, $img_gao-$xia, $ zuo+$i*$jiange, $img_gao-$xia-6, $zuobiao_yanse);
- imagestring ( $image, 1, $zuo+$i*$jiange-$jiange/4, $shang+($img_gao-$shang -$xia)+2,$y_name[$i], $zuobiao_yanse);
- }
//折線
- $shuju_yanse_int=0;
- for($i =0;$i if($i+1count($shuju)){
- imageline ( $image, $p_x[$i], $ p_y[$i], $p_x[$i+1], $p_y[$i+1], $xian_yanse);
- imagefilledrectangle($image, $p_x[$i]-1, $p_y[$i ]-1, $p_x[$i]+1, $p_y[$i]+1, $xian_yanse);
- }
- }
- //上一個循環沒有畫出最後一點效果,這裡也要追加
- 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);
//標註資料值
- for($i=0;$i imagestring ( $image, 3, $p_x[$i]+4, $p_y[$i]-12,$shuju[$i], $zuobiao_yanse);
- }
- //設定檔頭
- header('Content-type: image/png');
- //輸出影像
- imagepng($image);
- //釋放資源
imagedestroy($image); ?>
複製程式碼
二,使用方法
在需要顯示影像的位置插入以下程式碼:
-
-
複製程式碼說明:
其中a的值由自己計算得出;
a的文字格式是由「,」連接的若干個資料的字串,get方式傳入。
由於在圖形裡寫入中文需要更多PHP環境配置,這裡給出一個html解決方案:
只需要根據資料個數的不同,動態產生一個表格放置橫軸座標刻度名稱即可。
例:
-
-
- for($i=0;$i echo "
".$i."月 | ";
- }
- ?>
-
-
複製程式碼
|