canvas绘制饼图

  • 2019-01-30 16:24:17
  • 2,447 次阅读
  • 稿源:天马行空

cnavas绘制一个饼图十分方便,只要我们掌握了方法和技巧,画一个漂亮的饼图并困难,并且饼图在一些行业中也十分有用,因为它能够直观地反映出各部分的百分比,用于数据的统计。在画图的过程中运用了数学中的三角函数与角度和弧度的转换。下面是具体内容:

(1)最终效果图:

pieChart

(2)代码程序

  1. var canvas = document.getElementById("demo");
  2. var canvas = document.getElementById("demo");
  3. canvas.width = 600;
  4. canvas.height = 600;
  5. canvas.style.border = "1px solid #f00";
  6. var ctx = canvas.getContext("2d");
  7. var data = [{
  8. "value": .37,
  9. "color": "red",
  10. "title": "欣赏风景"
  11. },{
  12. "value": .33,
  13. "color": "blue",
  14. "title": "缓解压力"
  15. },{
  16. "value": .09,
  17. "color": "green",
  18. "title": "广交朋友"
  19. },{
  20. "value": .06,
  21. "color": "pink",
  22. "title": "培养独立能力"
  23. },{
  24. "value": .15,
  25. "color": "purple",
  26. "title": "其他"
  27. }];
  28. // 始边的角度与终边的角度
  29. var sAngle = -90;
  30. var eAngle = -90;
  31. var tAngle = 0;
  32. // 定义坐标圆心
  33. var centerX = canvas.width / 2;
  34. var centerY = canvas.height / 2;
  35. // 遍历每个扇形
  36. for(var i = 0; i < data.length; i++) { // 清除之前的样式 ctx.beginPath(); // 得到第i个扇形所占整个圆的终边角度 eAngle += data[i].value * 360; // 移动坐标圆心 ctx.moveTo(centerX, centerY); // 绘制第i个扇形 ctx.arc(centerX,centerY,200,sAngle * Math.PI / 180,eAngle * Math.PI / 180); // 第i个扇形填充颜色 ctx.fillStyle = data[i].color; ctx.fill(); // 给饼图添加文字 // 得到当前扇形角度的一半 tAngle = sAngle + 1 / 2 * data[i].value * 360; // 设置水平文字 if(tAngle > 90 & tAngle < 270)
  37. {
  38. ctx.textAlign = 'end';
  39. }
  40. // x = centerX + (r + 20) * Math.cos(tAngle * Math.PI / 180);
  41. var x = centerX + 220 * Math.cos(tAngle * Math.PI / 180);
  42. // x = centerX + (r + 20) * Math.sin(tAngle * Math.PI / 180);
  43. var y = centerY + 220 * Math.sin(tAngle * Math.PI / 180);
  44. ctx.fillText(data[i].value * 100 + '%', x, y)
  45. // 当前的终边的角度作为下个扇形始边角度的备用
  46. sAngle = eAngle
  47. }

喜欢 3

文章评论 (0)

表情

大眼 可爱 大笑 坏笑 害羞 发怒 折磨 快哭了 大哭 白眼 晕 流汗 困 腼腆 惊讶 憨笑 色 得意 骷髅 囧 睡觉 眨眼 亲亲 疑问 闭嘴 难过 淡定 抗议 鄙视 猪头