Javascript d3.js在v4中设置属性
以下代码适用于D3v3,但不适用于v4:Javascript d3.js在v4中设置属性,javascript,d3.js,Javascript,D3.js,以下代码适用于D3v3,但不适用于v4: function render(data) { //bind var cirs = svg.selectAll('circle').data(data); //enter cirs.enter().append('circle').attr('r', 2); //update cirs.attr('cx', function(d) { return d.x }) .attr('cy', function(d)
function render(data) {
//bind
var cirs = svg.selectAll('circle').data(data);
//enter
cirs.enter().append('circle').attr('r', 2);
//update
cirs.attr('cx', function(d) {
return d.x
})
.attr('cy', function(d) {
return d.y
});
//exit
cirs.exit().remove();
}
我的数据:
var objects = [
{x: 100, y:100},
{x: 70, y: 90},
{x: 181, y: 105},
{x: 80, y: 60},
{x: 160, y: 120},
{x: 168, y: 182},
{x: 95, y: 110}
]
render(objects);
我发现未设置cx
和cy
在版本4中有没有新的设置属性的方法?v4的答案是:
此外,不再将进入的节点合并到更新选择中;用于在数据联接后组合输入和更新
因此,您的更新选择将为空,对.attr()
的调用将永远不会执行,从而导致缺少属性值
要使代码正常工作,只需将以前输入的圆圈合并到更新选择中:
function render(data) {
//bind
var cirs = svg.selectAll('circle').data(data);
//enter
var enter = cirs.enter().append('circle').attr('r', 2);
//update (including merged enter selection)
var update = cirs.merge(enter); // Merge the enter selection into the update selection
update.attr('cx', function(d) {
return d.x
})
.attr('cy', function(d) {
return d.y
});
//exit
cirs.exit().remove();
}
var svg=d3.select('body').append('svg'))
.attr('宽度',250)
.attr('height',250);
函数渲染(数据){
//束缚
var cirs=svg.selectAll('circle').data(数据);
//进入
var enter=cirs.enter().append('circle').attr('r',2);
//更新(包括合并的输入选择)
var update=cirs.merge(enter);//将enter选择合并到更新选择中
update.attr('cx',函数(d){
返回d.x
})
.attr('cy',函数(d){
返回d.y
});
//出口
cirs.exit().remove();
}
变量对象=[{
x:100,
y:100
}, {
x:70,
y:90
}, {
x:181,
y:105
}, {
x:80,
y:60
}, {
x:160,
y:120
}, {
x:168,
y:182
}, {
x:95,
y:110
}];
渲染(对象)代码>
您的问题缺少代码中的一些重要部分。我的第一个猜测是,您没有在更新选择中输入您的选择,因此不会执行对attr()
的调用,因为更新选择是空的。就像我说的,这是一个粗略的猜测。要获得更深入的帮助,请提供更多的render()
函数。@altocumulus这是完整的代码。