PHP兌現動態產生餅狀圖、柱狀圖和折線圖(轉)

來源:互聯網
上載者:User
PHP實現動態產生餅狀圖、柱狀圖和折線圖(轉)
PHP在映像操作方面的表現非常出色,我們只需藉助可以免費得到的GD庫便可以輕鬆實現圖、表勾畫。下面將分別介紹PHP實現的餅狀圖、折線圖和柱狀圖以及他們的使用方法,這幾段代碼的特點就是不需要再把它們複製到你的代碼之中,只需要把計算得到的資料作為參數傳入,即可得到相應的圖形效果
代碼中所有使用的函數的說明,請參見php開發文檔

餅狀圖
設計思路
餅狀圖表對於查看一個值佔總值的百分比是一個好的方法。我們就用PHP來實現一個餅形圖表。
它的設計思想是:
1 接受參數,得到所有數值的和,得到每一個值占數值總和的比例。
2 根據比例計算每一個色塊在圖中的圓周角度
3 要產生立體效果,只需要用深顏色畫出陰影就可以了

實現過程
 $tugao/2-5; $h--) {$kaishi=0;$jieshu=0;for ($i = 0; $i < count($shuju); $i++) {$kaishi=$kaishi+0;$jieshu=$kaishi+$jiaodu[$i];$yanse_i=fmod($i,10);imagefilledarc($image,$yuanxin_x,$h,$tukuan,$tugao-20,$kaishi,$jieshu,$yanse[1][$yanse_i],IMG_ARC_PIE);$kaishi+=$jiaodu[$i];$jieshu+=$jiaodu[$i];}}//在最高處(也就是$h最小時)畫一個淺色餅圖,這個淺色圖跟先畫上的深色餅圖就能產生立體效果了for ($i = 0; $i < count($shuju); $i++) {$kaishi=$kaishi+0;$jieshu=$kaishi+$jiaodu[$i];$yanse_i=fmod($i,10);imagefilledarc($image, $yuanxin_x, $h, $tukuan, $tugao-20, $kaishi, $jieshu, $yanse[0][$yanse_i], IMG_ARC_PIE);$kaishi+=$jiaodu[$i];$jieshu+=$jiaodu[$i];}//設定檔案頭 header('Content-type: image/png');//輸出映像imagepng($image);//釋放資源 imagedestroy($image);?>


使用方法

在需要顯示映像的位置插入如下代碼

a的文字格式設定是由“,”串連的若干個資料的字串,get方式傳入。

折線圖

設計思路

用折線圖表查看某一資料在單位時段內的變化趨勢是一個好的選擇。我們就用PHP來實現一個動態折線圖表。
它的設計思想是:
1 接受參數,得到所有數值的和,得到資料的最大值以確定縱軸的最大刻度值
2 根據資料個數確定映像的寬度,並畫出橫軸和縱軸座標及刻度
3 畫直線串連各點,為每個點填充一個2*2的矩形,突出點的位置
4 在每個點的右上方標註每個點的資料值

實現過程
$zuidashujuzhi) $zuidashujuzhi=$shuju[$i];}//得到映像寬度 $img_kuan=$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-$xia, $img_kuan-$you/2, $img_gao-$xia, $zuobiao_yanse);//縱軸imageline ( $image, $zuo, $shang/2, $zuo, $img_gao-$xia, $zuobiao_yanse);//得到每個點的座標for($i=0;$icount($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


使用方法

在需要顯示映像的位置插入如下代碼

其中a的值由你自己計算得出
a的文字格式設定是由“,”串連的若干個資料的字串,get方式傳入。

由於往圖形裡寫入中文需要更多PHP環境配置,所以這裡給出一個html解決方案,實用也很靈活:
大家只需要根據資料個數的不同,動態產生一個表格放置橫軸座標刻度名稱就行了,像這樣
  ".$i."月";}?>
   


柱狀圖

設計思路

還是要首先確定縱軸的刻度值,確定縱軸的刻度最大值
然後根據得到的資料個數確定映像的寬度,這時就可以建立映像了
計算每個色柱的高度,用高度可以計算出色柱的填充範圍
用直線畫出座標軸,標註刻度值
用矩形填充色柱,並在色柱上方標註資料值
用Html方式畫出需要的橫軸座標名稱

實現過程
$zuidashujuzhi) $zuidashujuzhi=$shuju[$i];}//計算映像寬度 $img_kuan=$zuo+$you+$jiange+count($shuju)*($kuan+$jiange);//映像高 $img_gao=170;//儲存色柱高度的數組$zhugaodu = array();$image = imagecreate($img_kuan,$img_gao);$white = imagecolorallocate($image, 0xEE, 0xEE, 0xEE);//色柱顏色$shuju_yanse =array(imagecolorallocate($image, 0x97, 0xbd, 0x00),imagecolorallocate($image, 0x00, 0x99, 0x00),imagecolorallocate($image, 0xcc, 0x33, 0x00),imagecolorallocate($image, 0xff, 0xcc, 0x00),imagecolorallocate($image, 0x33, 0x66, 0xcc),imagecolorallocate($image, 0x33, 0xcc, 0x33),imagecolorallocate($image, 0xff, 0x99, 0x33),imagecolorallocate($image, 0xcc, 0xcc, 0x99),imagecolorallocate($image, 0x99, 0xcc, 0x66),imagecolorallocate($image, 0x66, 0xff, 0x99));//座標軸顏色$zuobiao_yanse = imagecolorallocate($image, 0x00, 0x00, 0x00);//橫軸imageline ( $image, $zuo, $img_gao-$xia, $img_kuan-$you/2, $img_gao-$xia, $zuobiao_yanse);//縱軸imageline ( $image, $zuo, $shang/2, $zuo, $img_gao-$xia, $zuobiao_yanse);//縱軸刻度,縱軸上共標註4個點,所以這裡分別計算即可imageline ( $image, $zuo, $shang, $zuo+6, $shang, $zuobiao_yanse);imagestring ( $image, 3, $zuo/4, $shang,round($zuidashujuzhi), $zuobiao_yanse);imageline ( $image, $zuo, $shang+($img_gao-$shang-$xia)*1/4, $zuo+6, round($shang+($img_gao-$shang-$xia)*1/4), $zuobiao_yanse);imagestring ( $image, 3, $zuo/4, $shang+($img_gao-$shang-$xia)*1/4,round($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, 3, $zuo/4, $shang+($img_gao-$shang-$xia)*2/4,round($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, 3, $zuo/4, $shang+($img_gao-$shang-$xia)*3/4,round($zuidashujuzhi*1/4), $zuobiao_yanse);//得到每個柱的高度for($i=0;$i


使用方法

在需要顯示映像的位置插入如下代碼

其中a的值由你自己計算得出
a的文字格式設定是由“,”串連的若干個資料的字串,get方式傳入。

同樣使用一個html解決方案,解決橫軸刻度名稱的問題:
根據資料個數的不同,動態產生一個表格放置橫軸座標刻度名稱就行了,像這樣
  ".$i."月";}?>
   

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.