gs.csv(数据1):
id, name, x_value, y_value
1, fruits, 60, 60
2, vegetables, 70, 70
...
circles.csv(数据2):
id, name, value, cx_value, cy_value
1, fruits, apple, 10, 10
2, fruits, pear, 20, 20
3, fruits, strawberry, 30, 30
4, vegetables, carrot, 40, 40
5, vegetables, celery, 50, 50
...
我有两个如上所述的数据文件。gs.csv (data1) 仅包含有关 g 元素的数据,而 circles.csv (data2) 仅包含有关圆的数据,我需要一种正确的方法来加入它们并创建以下内容:
<g class="groups" id="fruits" transform="translate(60,90)">
<circle class="some" id="apple" cx="10" cy="10"/>
<circle class="some" id="pear" cx="20" cy="20"/>
<circle class="some" id="strawberry" cx="30" cy="30"/>
...
</g>
<g class="groups" id="vegetables" transform="translate(70,70)">
<circle class="some" id="carrot" cx="40" cy="40">
<circle class="some" id="celery" cx="50" cy="50">
...
</g>
我无法加入这些文件,因为它们更复杂。我认为该代码应该类似于:
d3.csv("gs.csv", function(data1) {
d3.csv("circles.csv", function(data2) {
var svg = ...
var groups = svg.selectAll(".groups")
.data(data1)
.enter().append("g")
.attr("class", "groups")
.attr("id", function(d) { return d.name; })
.attr("transform", function(d){return "translate(" + d.x_value + "," + d.y_value + ")"});
groups.selectAll(".some")
.data(data2, function(d) { return d.id; })
.enter().append("circle")
.attr("class", "some")
.attr("id", function(d) { return d.value; })
.attr("cx", function(d) { return d.cx_value; })
.attr("cy", function(d) { return d.cy_value; });
})
});
我想到了两个解决方案,但总是有一些问题:首先,我尝试在第二个 .data() 中过滤来自 data2 的行,但我不知道如何访问实际组的属性以过滤除具有同名值。其次,我尝试使用键 d.name 将 d3.nest data2 放入组中,但它会覆盖原始 __ data_ 。因此,我尝试将键和值添加到每个组的 _ data__ 但没有成功。