D3。数据问题

时间:2017-01-27 07:53:08

标签: javascript d3.js

翻译(NaN时,NAN)。在第4节:

var bubble = d3.pack()
    .size([diameter, diameter])
    .padding(2);
var root = d3.hierarchy({"children": data.values})
console.log(bubble(root).children);
var node = svg.selectAll(".node")
              .data(bubble(root).children)
              .enter().append("g")
              .attr("class", "node")
              .attr("transform", function (d) { return "translate(" + [d.x, d.y] + ")"; });

正确地在v3中:

var bubble = d3.layout.pack()
               .sort(null)
               .size([diameter, diameter])
               .padding(2);
var root = {"children": data.values}
console.log(bubble.nodes(root).children);
var node = svg.selectAll(".node")
              .data(bubble.nodes(root)
              .filter(function (d) { return !d.children; }))
              .enter().append("g")
              .attr("class", "node")
              .attr("transform", function (d) { return "translate(" + d.x + "," + d.y + ")"; });

在v3控制台中,“r”有一个值。但在v4没有。我认为这是数据导入的问题。

1 个答案:

答案 0 :(得分:1)

要获得xyr属性,您必须将功能传递给sum()中的d3.hierarchy()

根据API

  

在调用需要node.value

的分层布局之前,必须调用node.sum或node.count

由于我不知道数据的结构,我创建了这个虚拟数组:

var data = {
    children: [{
        name: "foo",
        size: 50
    }, {
        name: "bar",
        size: 20
    }, {
        name: "baz",
        size: 40
    }]
};

以下是使用sum()的代码,请检查控制台:



var data = {
    children: [{
        name: "foo",
        size: 50
    }, {
        name: "bar",
        size: 20
    }, {
        name: "baz",
        size: 40
    }]
};

var diameter = 500;

var bubble = d3.pack()
    .size([diameter, diameter])
    .padding(2);

var root = d3.hierarchy(data)
    .sum(function(d) {
        return d.size;
    });;

console.log(bubble(root).children);

<script src="https://d3js.org/d3.v4.min.js"></script>
&#13;
&#13;
&#13;