3

每当数据发生变化时,我都会尝试在 d3.js 中更新我的图例。我的jsfiddle都应该更新图例。每当使用更新日期按钮将不同的数据放入费用中时,密钥集就会发生变化。

我想是这样的:

var legendBox = legend.selectAll("rect")
  .data(keys);

legendBox.enter()
  .append("rect");

legendBox.exit()
  .remove();

legendBox.attr("x", width - 150)
  .attr("y", function (d, i) { return i * 20;})
  .attr("width", 10)
  .attr("height", 10)
  .style("fill", function (d, i) { return color(i);});

每当键数组更改时,都会更新我的图例并删除旧标签。但它不会删除旧标签,它只是在旧标签之上添加标签。如何更新我的图例以反映日期?

4

1 回答 1

3

问题是您g.legend每次都在为图例创建一个:

var legend = svg.append("g")
    .attr("class", "legend")
    .attr("height", 100)
    .attr("width", 100)
    .attr("transform", "translate(-20, 50)");

相反,您应该在 中创建一次initPlot,然后将其作为var legend = svg.select('g.legend')后续图例recttext.

Demo.

于 2013-11-04T16:33:31.240 回答