【D3.js数据可视化系列教程】(二十三)--饼图圆环图

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/zhang__tianxu/article/details/14103477

饼图圆环图

  1. 饼布局

转化数据为适合生成饼图的对象数组

var pie = d3.layout.pie(dataset);

    
    

  2. 绘制弧形

用svg的path绘制弧形的内置方法


    
    
  1. var arc = d3.svg.arc() //设置弧度的内外径,等待传入的数据生成弧度
  2. .outerRadius(outerRadius)
  3. .innerRadius(innerRadius);

  3. 颜色

var color = d3.scale.category10();//创建序数比例尺和包括10中颜色的输出范围

    
    

  4. 弧分组

准备分组,把每个分组移到图表中心


    
    
  1. var arcs = svg.selectAll( "g.arc")
  2. .data(pie(dataset))
  3. .enter()
  4. . append( "g")
  5. .attr( "class", "arc")
  6. //移到图表中心
  7. //translate(a,b)a表示横向平移距离,b表示纵向平移距离
  8. .attr( "transform", "translate("+outerRadius+ ","+outerRadius+ ")");

  5. 添加弧路径

为组中每个元素绘制弧形路路径


   
   
  1. arcs.append( "path") //每个g元素都追加一个path元素用绑定到这个g的数据d生成路径信息
  2. .attr( "fill", function(d,i){ //填充颜色
  3. return color(i);
  4. })
  5. .attr( "d",arc); //将角度转为弧度(d3使用弧度绘制)

  6. 添加文字

为组中每个元素添加文本


    
    
  1. arcs.append( "text") //每个g元素都追加一个path元素用绑定到这个g的数据d生成路径信息
  2. .attr( "transform", function(d){
  3. return "translate("+arc.centroid(d)+ ")"; //计算每个弧形的中心点(几何中心)
  4. })
  5. .attr( "text-anchor", "middle")
  6. .text( function(d){
  7. return d.value; //这里已经转为对象了
  8. });

  7. 圆环

通过设置内半径生成圆环

var innerRadius = w/3;

    
    

  8 完整代码


    
    
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>testD3-20-pie.html </title>
  6. <script type="text/javascript" src="http://localhost:8080/spring/js/d3.v3.js"> </script>
  7. <style type="text/css">
  8. </style>
  9. </head>
  10. <body>
  11. <script type="text/javascript">
  12. var dataset=[ 5 , 10 , 20 , 40 , 6 , 25 ];
  13. //(1)转化数据为适合生成饼图的对象数组
  14. var pie=d3.layout.pie(dataset);
  15. var h= 300 ;
  16. var w= 300 ;
  17. var outerRadius=w/ 2 ; //外半径
  18. //(7)圆环内半径
  19. var innerRadius=w/ 3 ;
  20. //(2)用svg的path绘制弧形的内置方法
  21. var arc=d3.svg.arc() //设置弧度的内外径,等待传入的数据生成弧度
  22. .outerRadius(outerRadius)
  23. .innerRadius(innerRadius);
  24. var svg=d3.select( "body" )
  25. .append( "svg" )
  26. .attr( "width" ,w)
  27. .attr( "height" ,h);
  28. //(3)颜色函数
  29. var color=d3.scale.category10(); //创建序数比例尺和包括10中颜色的输出范围
  30. //(4)准备分组,把每个分组移到图表中心
  31. var arcs=svg.selectAll( "g.arc" )
  32. .data(pie(dataset))
  33. .enter()
  34. .append( "g" )
  35. .attr( "class" , "arc" )
  36. //移到图表中心
  37. .attr( "transform" , "translate(" +outerRadius+ "," +outerRadius+ ")" ); //translate(a,b)a表示横坐标起点,b表示纵坐标起点
  38. //(5)为组中每个元素绘制弧形路路径
  39. arcs.append( "path" ) //每个g元素都追加一个path元素用绑定到这个g的数据d生成路径信息
  40. .attr( "fill" , function(d,i) { //填充颜色
  41. return color(i);
  42. })
  43. .attr( "d" ,arc); //将角度转为弧度(d3使用弧度绘制)
  44. //(6)为组中每个元素添加文本
  45. arcs.append( "text" ) //每个g元素都追加一个path元素用绑定到这个g的数据d生成路径信息
  46. .attr( "transform" , function(d) {
  47. return "translate(" +arc.centroid(d)+ ")" ; //计算每个弧形的中心点(几何中心)
  48. })
  49. .attr( "text-anchor" , "middle" )
  50. .text( function(d) {
  51. return d.value; //这里已经转为对象了
  52. });
  53. </script>
  54. </body>
  55. </html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值