[英]How to update & transition ordinalScale axis in d3 v4
我以为我在做d3工作时会学到一些关于ES6类的知识,所以我做了一个有序条形图类( 在这里摆弄 )。 它显示多个数据系列(例如:
[
[{"label":"apple", "value" :25},
{"label":"orange", "value": 16},
{"label":"pear", "value":19}],
[{"label":"banana", "value" :12},
{"label":"grape", "value": 6},
{"label":"peach", "value":5}]
];
我正在尝试使更新部分正常工作(您可以在其中提供新数据,并且棒/轴过渡很好)。 不幸的是,很多示例代码都是针对v3的,似乎不像我正在使用的v4那样工作。 具体方法是:
updateData(data){
//get an array of the ordinal labels out of the data
let labels = function(data){
let result = [];
for(let i=0; i<data.length; i++){
for (let j=0; j<data[i].length; j++){
result.push(data[i][j].label);
}
}
return result;
}(data);
//loop through the (potentially multiple) series in the data array
for(let i=0; i<data.length; i++){
let series = data[i],
bars = this.svg.selectAll(".series" + i)
bars
.data(series)
.enter().append("rect")
.attr("class", ("series" + i))
.classed("bar", true)
.merge(bars)
.attr("x", 0)
.attr("height", this.y.bandwidth())
.attr("y", (d) => { return this.y(d.label); })
.transition().duration(500) //grow bars horizontally on load
.attr("width", (d) => { return this.x(d.value); });
bars.exit().remove();
}
//update domain with new labels
this.y.domain(labels);
//change the y axis
this.svg.select(".yaxis")
.transition().duration(500)
.call(this.yAxis)
}
我正在尝试将更新模式基于Mike Bostock的代码 。
我从.call(this.yAxis)
收到内部d3错误,过渡没有动画,并且yaxis没有更新。 此外,这些条也不会过渡。 怎么了
几个问题:
(y(d.yourOrdinalLabel)
。因此,轴号必须在条码之前。 bars
(或连接到数据的任何元素)应声明为该连接操作的结果,以便可以将其与.attr()
链接以获得可视属性。 let bars = svg.selectAll(".yourClass").data(yourData);
update
方法更为明智。 参见更新的小提琴。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.