Javascript D3 JS追加一个包含3个新键值对的新文本框

Javascript D3 JS追加一个包含3个新键值对的新文本框,javascript,d3.js,svg,Javascript,D3.js,Svg,我是D3JS新手,我正在努力为我的问题找到合适的解决方案 我想将一组新的数据从一个单独的数据集变量添加到一个图表中。最多5个值,在单独的行上 删除彩色矩形和传说名称后,我希望新的值坐在前面的传说中的中间。 var dataset = [ { name: 'IE', percent: 39.10 }, { name: 'Chrome', percent: 32.51 }, { name: 'Safari', percent: 13.68 }, { name: 'Firefox', percent:

我是D3JS新手,我正在努力为我的问题找到合适的解决方案

我想将一组新的数据从一个单独的数据集变量添加到一个图表中。最多5个值,在单独的行上

删除彩色矩形和传说名称后,我希望新的值坐在前面的传说中的中间。

var dataset = [
{ name: 'IE', percent: 39.10 },
{ name: 'Chrome', percent: 32.51 },
{ name: 'Safari', percent: 13.68 },
{ name: 'Firefox', percent: 8.71 },
{ name: 'Others', percent: 6.01 }
];

var pie=d3.layout.pie()
  .value(function(d){return d.percent})
  .sort(null)
  .padAngle(.03);

var w=300,h=300;

var outerRadius=w/2;
var innerRadius=100;

var color = d3.scale.category10();

var arc=d3.svg.arc()
  .outerRadius(outerRadius)
  .innerRadius(innerRadius);

var svg=d3.select("#chart")
  .append("svg")
  .attr({
      width:w,
      height:h,
      class:'shadow'
  }).append('g')
  .attr({
      transform:'translate('+w/2+','+h/2+')'
  });
var path=svg.selectAll('path')
  .data(pie(dataset))
  .enter()
  .append('path')
  .attr({
      d:arc,
  fill:function(d,i){
      return color(d.data.name);
  }
  });

path.transition()
  .duration(1000)
  .attrTween('d', function(d) {
      var interpolate = d3.interpolate({startAngle: 0, endAngle: 0}, d);
      return function(t) {
          return arc(interpolate(t));
      };
  });


var restOfTheData=function(){
    var text=svg.selectAll('text')
        .data(pie(dataset))
        .enter()
        .append("text")
        .transition()
        .duration(200)
        .attr("transform", function (d) {
            return "translate(" + arc.centroid(d) + ")";
        })
        .attr("dy", ".4em")
        .attr("text-anchor", "middle")
        .text(function(d){
            return d.data.percent+"%";
        })
        .style({
            fill:'#fff',
            'font-size':'10px'
        });

    var legendRectSize=20;
    var legendSpacing=7;
    var legendHeight=legendRectSize+legendSpacing;


    var legend=svg.selectAll('.legend')
        .data(color.domain())
        .enter()
        .append('g')
        .attr({
            class:'legend',
            transform:function(d,i){
                //Just a calculation for x & y position
                return 'translate(-35,' + ((i*legendHeight)-65) + ')';
            }
        });
    legend.append('rect')
        .attr({
            width:legendRectSize,
            height:legendRectSize,
            rx:20,
            ry:20
        })
        .style({
            fill:color,
            stroke:color
        });

    legend.append('text')
        .attr({
            x:30,
            y:15
        })
        .text(function(d){
            return d;
        }).style({
            fill:'#929DAF',
            'font-size':'14px'
        });
};

setTimeout(restOfTheData,1000);
这是网站上的代码:


原始数据集位于文件顶部:

var dataset = [
        { name: 'IE', percent: 39.10 },
        { name: 'Chrome', percent: 32.51 },
        { name: 'Safari', percent: 13.68 },
        { name: 'Firefox', percent: 8.71 },
        { name: 'Others', percent: 6.01 }
];
您可以这样修改它,只需添加数据(注意,我更改了名称和值)。这段代码将支持您想要的任意多行,但请记住它不实现计算百分比,因此您需要将值的总和保持在
100

var dataset = [
        { name: 'foo', percent: 59 },
        { name: 'bar', percent: 31 },
        { name: 'lorem', percent: 8 },
        { name: 'ipsum', percent: 2 }
    ];
以下是原始代码笔的一个分支,实现了以下功能: