d3 rect没有显示出来

paw*_*moy 3 javascript jquery d3.js

我想显示一些数据的图例(标题?).对于图例的每个部分,我将一个rect和ap附加到父分区.问题是rect没有出现.

这是我的代码:

var groups = {{ groups|safe }};
groups.forEach(function(group, i) {
    var div = d3.select("#collapse-legend");
    div.append("rect")
        .attr("width", 17)
        .attr("height", 17)
        .style("fill-opacity", 1)
        .style("fill", function (d) { return c(i); });
    div.append("p").text(group)
});
Run Code Online (Sandbox Code Playgroud)

现在,当我检查我的网页内容时,我得到rect和p,但是rect:

  1. 没有出现
  2. 似乎宽度为0(用firefox显示其区域)

我的代码中有错误吗?有没有更好的方法来实现这一目标?我是javascript和d3.js的新手所以请放纵^^

更新

所以这就是我的结局.
HTML:

<div ...>
    <svg id="legend-svg"></svg>
</div>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

// set height of svg
d3.select("#legend-svg").attr("height", 18*(groups.length+1));

// for each group, append rect then text
groups.forEach(function(group, i) {
    d3.select("#legend-svg").append("rect")
        .attr("y", i*20)
        .attr("width", 18)
        .attr("height", 18)
        .style("fill-opacity", 1)
        .style("fill", function (d) { return c(i); });
    d3.select("#legend-svg").append("text")
        .attr("x", 25)
        .attr("y", i*20+15)
        .text(group);
});
Run Code Online (Sandbox Code Playgroud)

Rob*_*son 6

SVG元素喜欢<rect>不能直接使用html <div>元素的子元素.您必须将它们放在<svg>容器元素中.