javascript - 在 D3.js 中向动画饼图添加新分段

标签 javascript d3.js visualization pie-chart

我无法向 D3.js 饼图添加分段。我知道我需要使用 .enter().append() 来暂存新数据 - 但我不确定当我有弧时如何应用它分组(我需要标签)。

这是我的更新函数:

var updateChart = function(dataset) {
  arcs.data(donut(dataset));
  arcs.transition()
    .duration(duration)
    .attrTween("d", arcTween);
  sliceLabel.data(donut(dataset));
  sliceLabel.transition()
    .duration(duration)
    .attr("transform", function(d) { return "translate(" + (arc.centroid(d)) + ")"; })
    .style("fill-opacity", function(d) {
      if (d.value === 0) { return 1e-6; }
      else { return 1; }
    });
};

如何设置初始图表:

var arc = d3.svg.arc()
  .innerRadius(radius * .4)
  .outerRadius(radius);
var svg = d3.select("body")
  .append("svg")
  .append("svg")
  .attr("width", width)
  .attr("height", height);

var arc_grp = svg.append("g")
  .attr("class", "arcGrp")
  .attr("transform", "translate(" + (width / 2) + "," + (height / 2) + ")");
var label_group = svg.append("g")
  .attr("class", "lblGroup")
  .attr("transform", "translate(" + (width / 2) + "," + (height / 2) + ")");

var arcs = arc_grp.selectAll("path")
  .data(donut(data));
arcs.enter()
  .append("path")
  .attr("stroke", "white")
  .attr("stroke-width", 0.8)
  .attr("fill", function(d, i) { return color(i); })
  .attr("d", arc)
  .each(function(d) { return this.current = d; });

var sliceLabel = label_group.selectAll("text")
  .data(donut(data));
sliceLabel.enter()
  .append("text")
  .attr("class", "arcLabel")
  .attr("transform", function(d) { return "translate(" + (arc.centroid(d)) + ")"; })
  .attr("text-anchor", "middle")
  .style("fill-opacity", function(d) {
    if (d.value === 0) { return 1e-6; }
    else { return 1; }
  })
  .text(function(d) { return d.data.label; });

完整的jsfiddle:http://jsfiddle.net/kPM5L/

向图表添加新数据的简洁方法是什么?

最佳答案

为了使转换顺利进行,您还需要将最初使用的代码添加到更新函数中。工作 jsfiddle here .

还有一些让人高兴的代码——这也是更新函数中需要的:

.enter()
.append("path")
.attr("stroke", "white")
.attr("stroke-width", 0.8)
.attr("fill", function(d, i) { return color(i); })
.attr("d", arc)
.each(function(d) { return this.current = d; });

.enter()
.append("text")
.attr("class", "arcLabel")
.attr("transform", function(d) { return "translate(" + (arc.centroid(d)) + ")"; })
.attr("text-anchor", "middle")
.style("fill-opacity", function(d) {
  if (d.value === 0) { return 1e-6; }
  else { return 1; }
})
.text(function(d) { return d.data.label; });

关于javascript - 在 D3.js 中向动画饼图添加新分段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15843291/

相关文章:

javascript - 机器人不断重复

javascript - 带有 Nginx + NodeJS 跨源请求的 Socket.io 只能部分工作

javascript - 如何在 react.js 中检测父组件中的子渲染

javascript - 使 Nvd3 饼图显示带小数的百分比

javascript - 如何找到 SVG 元素的翻译坐标?

r - 用于可视化离散和连续面板数据的加权桑基/冲积图?

visualization - 使用 Javascript 的流程/思维导图示例?

javascript - 如何使用 AJAX 完全关闭模式框? - ASP.NET MVC

javascript - D3js 比例图表 x 轴在中间

cocoa - Cocoa 中的实时音频可视化?