Html5餅圖繪製(統計圖)

來源:互聯網
上載者:User

Html5提供了強大的繪圖API,讓我們能夠使用javascript輕鬆繪製各種圖形。本文將主要講解使用HTML5繪製餅圖(統計圖)的方法。先看一下餅圖效果:

這個圖是動態產生的,根據傳入的比例參數(數組),來動態繪製餅圖。餅圖的大小也是根據<canvas>高度來動態調整的。

全部代碼如下:

<!DOCTYPE html><html>    <head>        <title>Canvas測試</title>        <meta charset="gbk">        <script>            //繪製餅圖            function drawCircle(canvasId, data_arr, color_arr, text_arr)            {                var c = document.getElementById(canvasId);                var ctx = c.getContext("2d");                var radius = c.height / 2 - 20; //半徑                var ox = radius + 20, oy = radius + 20; //圓心                var width = 30, height = 10; //圖例寬和高                var posX = ox * 2 + 20, posY = 30;   //                var textX = posX + width + 5, textY = posY + 10;                var startAngle = 0; //起始弧度                var endAngle = 0;   //結束弧度                for (var i = 0; i < data_arr.length; i++)                {                    //繪製餅圖                    endAngle = endAngle + data_arr[i] * Math.PI * 2; //結束弧度                    ctx.fillStyle = color_arr[i];                    ctx.beginPath();                    ctx.moveTo(ox, oy); //移動到到圓心                    ctx.arc(ox, oy, radius, startAngle, endAngle, false);                    ctx.closePath();                    ctx.fill();                    startAngle = endAngle; //設定起始弧度                    //繪製比例圖及文字                    ctx.fillStyle = color_arr[i];                    ctx.fillRect(posX, posY + 20 * i, width, height);                    ctx.moveTo(posX, posY + 20 * i);                    ctx.font = 'bold 12px 微軟雅黑';    //斜體 30像素 微軟雅黑字型                    ctx.fillStyle = color_arr[i]; //"#000000";                    var percent = text_arr[i] + ":" + 100 * data_arr[i] + "%";                    ctx.fillText(percent, textX, textY + 20 * i);                }            }            function init() {                //繪製餅圖                //比例資料和顏色                var data_arr = [0.05, 0.25, 0.6, 0.1];                var color_arr = ["#00FF21", "#FFAA00", "#00AABB", "#FF4400"];                var text_arr = ["第一季度", "第二季度", "第三季度", "第四季度"];                drawCircle("canvas_circle", data_arr, color_arr, text_arr);            }            //頁面載入時執行init()函數            window.onload = init;        </script>    </head>    <body>        <h3>HTML5繪製餅圖示範</h3>        <p>            <canvas id="canvas_circle" width="500" height="300" style="border:2px solid #0026ff;" >                瀏覽器不支援canvas            </canvas>        </p>    </body></html>

這個函數可以直接使用,如果想做的更漂亮,可以增加一些額外的美觀繪製。

本代碼最大的靈活性是將繪製參數與繪製代碼分離,餅圖大小根據Canvas容器高度自動調整。傳遞參數方式如下:

var data_arr = [0.05, 0.25, 0.6, 0.1]; //比例資料var color_arr = ["#00FF21", "#FFAA00", "#00AABB", "#FF4400"]; //顏色var text_arr = ["第一季度", "第二季度", "第三季度", "第四季度"]; //文字//繪製餅圖drawCircle("canvas_circle", data_arr, color_arr, text_arr);

如有錯誤歡迎指正!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.