在巢中访问数据d3

时间:2017-11-15 11:00:17

标签: javascript d3.js nested

我遇到了困扰我几天的问题。

我的数据如下:

Origin Area Warehouse WarehouseID
杰克阿尔法1 B Jack Bravo 2
C杰克三角洲3
D查尔斯阿尔法1 E Charles Bravo 2
F Charles Delta 3
G Beau Alpha 1
H Beau Bravo 2
I Beau Delta 3
J Taco Alpha 1
K Taco Bravo 2
L Taco Delta 3
M Vigo Alpha 1
N Vigo Bravo 2
O Vigo Delta 3

我想要做的是在左边创建一个带有原点的块列表。在仓库中间有一个街区列表。然后在仓库中我放置不同的区域。

我使用d3.map创建了左侧和中间的块列表:

            var warehouse = d3.map(data, function(d){
            return d.Warehouse;
            })
            .keys();

            svg.selectAll("DWH")
                .data(DWHs)
                .enter()
                .append("rect")
                .attr("x", w/2)
                .attr("y", function(d, i) {
                        return (i * (h / warehouse.length))+ 5;
                })
                .attr("width", 200)
                .attr("height", (h / (warehouse.length + 0.5)));

哪个效果很好。但是当我想在仓库块中添加区域时,我需要能够参考块应该在哪个仓库。我认为使用map函数是不可能的,但是d3.nest应该可以。所以我尝试过这样的事情:

            var wrangled = d3.nest()
                .key(function(d){
                return d.WarehouseID;
                })
            .entries(data);

但是当我想要绘制仓库时我必须访问数据..所以我想到了这样的事情:

            svg.selectAll("DWH")
            .data(wrangled)
            .enter()
            .append("rect")
            .attr("x", w/2)
            .attr("y", function(d, i) {
                    return (i * (h / key.length))+ 5;
            })
            .attr("width", 200)
            .attr("height", (h / (warehouse.length + 0.5)));

但是key.length并不是真正的东西,我还没能找到一种方法来获取巢的大小。

所以我刚刚使用了之前的代码,但是当我想在仓库中绘制区域时,我遇到了另一个问题。我需要能够说,例如,在数据的第一行:杰克区域,必须在仓库Alpha中绘制。哪个应该是if语句和嵌套。但我不知道从哪里开始。我一直试图了解巢穴,并且发现了相当多的资源,但是当你想用一个东西绘制东西时,却没有找到如何访问巢穴的不同部分。有人可以帮我这个吗?

我希望我的问题很明确。提前谢谢。

0 个答案:

没有答案