如何在图表中添加图例?

时间:2017-01-02 17:26:03

标签: javascript d3.js

如何在图表中添加图例(see fiddle)?我尝试按如下方式定义图例,但随后图表消失(参见this fiddle)。

var height = 900, width = 900;
var gridSize = Math.floor(width / 42);
var legendElementWidth = gridSize*2;

var legend = svg.selectAll(".legend")
              .data([0].concat(colorScaleDomain.quantiles()), function(d) { return d; });

legend.enter().append("g")
  .attr("class", "legend");

legend.append("rect")
.attr("x", height)
.attr("y", function(d, i) { return legendElementWidth * (i-0.5); })
.attr("width", gridSize / 2 )
.attr("height", legendElementWidth)
.style("fill", function(d, i) { return colors[i]; });

legend.append("text")
.attr("class", "mono")
.text(function(d) { return "≥ " + Math.round(d) + "%"; })
.attr("x", (height) + gridSize)
.attr("y", function(d, i) { return legendElementWidth*i; } );

legend.exit().remove();

1 个答案:

答案 0 :(得分:2)

这是问题列表:

  1. 没有colorScaleDomain.quantiles()。它应该是colorScale.quantiles()

  2. 元素的顺序在SVG中非常重要,SVG没有z索引。所以,你的传说......

    legend.enter().append("g")
        .attr("class", "legend");
    
  3. ...应该在图表的绘图代码之后。但由于第三个问题,这个步骤甚至可以被忽略:

    1. 你的传说 SVG之外。我纠正了这个:

      var svg = d3.select("body").append("svg")
          .attr("width", diameter + 200)//adding some space in the SVG
      
    2. 传说中的一些神奇数字代码。相应地改变它们(在大多数情况下,幻数不是一个好习惯)。

      这是您更新的小提琴:https://jsfiddle.net/hsq05oq9/