我遇到了D3 joins的问题。我在气泡图上创建了一些圆圈。当用户单击“显示为地图”按钮时,我想将圆圈转换为地图,然后为每个圆圈添加一个标签。
目前,点击处理程序将圆圈移动 OK,然后给我一个 JavaScript 错误而不是添加标签:Uncaught TypeError: Object [object SVGCircleElement]... has no method 'append'
。我知道这是因为我的连接语法不正确,但我该如何解决呢?
我能找到的所有添加新 D3 元素的示例都适用于您要绑定新数据的情况——而不是当您已经拥有已绑定数据的现有元素时。
这是我创建圈子的代码:
var circle = g.selectAll('.city')
.data(data).enter()
.append('circle')
.attr('class', 'city')
.attr('r', rfunc).attr("cy", 0)
.attr("cx", function(d, i) {
return rdist(d['dist']);
}).attr("transform", function(d, i) {
return "rotate(" + d.radial_pos + " 0 0)";
});
这是我的点击处理程序:
d3.select("#layout_geo").on("click", function() {
// Move the circles - this works OK.
var circles = d3.selectAll(".city")
.transition()
.duration(1300)
.attr('cx', function(d) {
return merc([d['lon'], d['lat']])[0] - 350;
}).attr('cy', function(d) {
return merc([d['lon'], d['lat']])[1] - 280;
});
// How to add text to each circle?
circles.append('text')
.attr('class', 'background')
.text(function(d) {
console.log(d.name + ', ' + d.city);
return d.name + ', ' + d.city;
})
.attr('cx', function() {
return ???;
}).attr('cy', function() {
return ???;
});
});