简体   繁体   English

需要帮助将d3.pack()从v3转换为v4

[英]Need help converting d3.pack() from v3 to v4

The following code worked in d3 v3: 以下代码在d3 v3中有效:

// data truncated for brevity
var data.inner = [{
    "candidate": "hillary",
    "data": [{
        "committee.name": "CITIZENS UNITED SUPER PAC LLC",
        "candidate": "hillary",
        "spent": 2243599
    }, {
        "committee.name": "FREEDOM'S DEFENSE FUND",
        "candidate": "hillary",
        "spent": 2481851
    }]
}, {
    "candidate": "trump",
    "data": [{
        "committee.name": "CITIZENS UNITED SUPER PAC LLC",
        "candidate": "trump",
        "spent": 255281
    }, {
        "committee.name": "CLUB FOR GROWTH ACTION",
        "candidate": "trump",
        "spent": 14869434
    }]
}]

var bubble_inner = d3.layout.pack()
    .value(function(d) {
        // This returns a sum in integer
        // ex. Hillary returns 4725450 = 2243599 + 2481851
        return _(d.data).chain()
            .pluck("spent")
            .reduce(function(memo, num) {
                return memo + num;
            }, 0)
            .value();
    })
    .sort(null)
    .size([2 * radius_pack, 2 * radius_pack])
    .padding(padding_pack);

var node_inner_g = inner.selectAll("g.node_inner")
    .data(
        bubble_inner.nodes({ children: data.inner })
            .filter(function(d) {
                return !d.children;
            })
    )
    .enter()
    .append("g")
    // do stuff

I'm have a really hard time understanding the new d3.pack() and d3.hierarchy() in v4. 我很难理解v4中的新d3.pack()d3.hierarchy() I know I'm supposed to put some of logic inside sum() for hierarchy but I can't wrap my head around it. 我知道我应该在sum()内放入一些逻辑以进行hierarchy但是我无法将其束之高阁。

I figured it out like this: 我是这样想的:

var bubble_inner = d3.pack()
    .size([2 * radius_pack, 2 * radius_pack])
    .padding(padding_pack);

var root = d3.hierarchy({"children": data.inner})
    .sum(function(d) {
        return _(d.data).chain()
            .pluck("spent")
            .reduce(function(memo, num) {
                return memo + num;
            }, 0)
            .value();
    });

var node_inner_g = inner.selectAll("g.node_inner")
    .data(
        bubble_inner(root).children
    )
    .enter()
    .append("g")
        .attr("class", function(d) {
            return "node_inner " + d.candidate;
        })
        .attr("transform", function(d) {
            return "translate(" + [d.x, d.y] + ")";
        });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM