使用 canvas 元素绘制饼图的步骤如下:
<canvas id="myCanvas" width="500" height="500"></canvas>
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
var data = [30, 20, 10, 40];
arc()
方法绘制饼图。var total = 0;
for(var i = 0; i < data.length; i++) {
total += data[i];
}
var startAngle = 0;
for(var i = 0; i < data.length; i++) {
var sliceAngle = 2 * Math.PI * data[i] / total;
ctx.beginPath();
ctx.arc(250, 250, 200, startAngle, startAngle + sliceAngle);
ctx.fillStyle = "hsl(" + Math.round(i * 360 / data.length) + ", 100%, 50%)";
ctx.lineTo(250, 250);
ctx.fill();
startAngle += sliceAngle;
}
在以上代码中,arc()
方法用于绘制圆弧,其参数依次为圆心的 x 坐标、圆心的 y 坐标、半径、起始角度和结束角度。fillStyle
属性设置颜色,使用 hsl()
方法创建一个颜色,其中第一个参数为色相,第二个参数为饱和度,第三个参数为亮度。lineTo()
方法用于连接圆弧的结束点和圆心,最后使用 fill()
方法填充图形。
var legend = document.getElementById("legend");
for(var i = 0; i < data.length; i++) {
var item = document.createElement("div");
item.innerHTML = "<span style='display:inline-block;width:20px;height:20px;background-color:hsl(" + Math.round(i * 360 / data.length) + ", 100%, 50%);'></span> Part " + (i+1) + ": " + data[i];
legend.appendChild(item);
}
在以上代码中,创建一个名为 legend 的 div 元素,使用 for 循环遍历数据,为每个部分创建一个 div 元素,设置其背景颜色和文字说明,并将其添加到 legend 元素中。
完整代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Pie Chart</title>
</head>
<body>
<canvas id="myCanvas" width="500" height="500"></canvas>
<div id="legend"></div>
<script>
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
var data = [30, 20, 10, 40];
var total = 0;
for(var i = 0; i < data.length; i++) {
total += data[i];
}
var startAngle = 0;
for(var i = 0; i < data.length; i++) {
var sliceAngle = 2 * Math.PI * data[i] / total;
ctx.beginPath();
ctx.arc(250, 250, 200, startAngle, startAngle + sliceAngle);
ctx.fillStyle = "hsl(" + Math.round(i * 360 / data.length) + ", 100%, 50%)";
ctx.lineTo(250, 250);
ctx.fill();
startAngle += sliceAngle;
}
var legend = document.getElementById("legend");
for(var i = 0; i < data.length; i++) {
var item = document.createElement("div");
item.innerHTML = "<span style='display:inline-block;width:20px;height:20px;background-color:hsl(" + Math.round(i * 360 / data.length) + ", 100%, 50%);'></span> Part " + (i+1) + ": " + data[i];
legend.appendChild(item);
}
</script>
</body>
</html>
注意,以上代码只是一个简单的饼图绘制示例,实际应用中需要根据需求进行修改和优化。