我遇到了困扰我几天的问题。
我的数据如下:
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语句和嵌套。但我不知道从哪里开始。我一直试图了解巢穴,并且发现了相当多的资源,但是当你想用一个东西绘制东西时,却没有找到如何访问巢穴的不同部分。有人可以帮我这个吗?
我希望我的问题很明确。提前谢谢。